<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
#canvas{
background:#000;
}
</style>
</head>
<body>
<canvas id="canvas"></canvas> </body>
</html>
<script>
var canvas=document.getElementById("canvas");
var ctx = canvas.getContext('2d');
var WHeight=document.body.offsetHeight;
var WWidth=document.body.offsetWidth ;
canvas.width=WWidth;
canvas.height=WHeight;
var Number=1200; //控制粒子的个数
var Data=[];
Dataarc() //多个圆
function Dataarc()
{
for(var i=0;i<Number;i++)
{
Data[i]={
x:~~(Math.random()*WWidth),
y:~~(Math.random()*WHeight),
px:Math.random()*2,
py: Math.random()*2
}
console.log(Data);
arc(Data[i].x, Data[i].y);
}
}
function arc(x,y) //画圆
{
ctx.save();
ctx.beginPath();
ctx.fillStyle="#fff";//填充颜色,默认是黑色
ctx.arc(x,y,2,0,2*Math.PI,false);
ctx.fill();
ctx.stroke();
}
function line(x1,y1,x2,y2) //连线的线段
{
ctx.save();
var linear=ctx.createLinearGradient(x1,y1,x2,y2);
linear.addColorStop( 0, 'red' );
linear.addColorStop( 1, 'blue' );
ctx.lineWidth=1.5;
ctx.strokeStyle = linear;
ctx.beginPath();
ctx.moveTo(x1, y1);
ctx.closePath();
ctx.lineTo(x2, y2);
ctx.stroke();
ctx.restore();
}
function Motion() //控制粒子的运动和判断连线条件
{
ctx.clearRect(0,0,WWidth,WHeight);
if(Data!="")
{
for(var i=0;i<Number;i++)
{
if(Data[i].x<=0 ||Data[i].x>=WWidth)
{
Data[i].px=-Data[i].px; }
if( Data[i].y>=WHeight||Data[i].y<=0)
{
Data[i].py=-Data[i].py;
}
Data[i].x=~~(Data[i].x)-~~(Data[i].px);
Data[i].y=~~(Data[i].y)+~~(Data[i].py);
arc(Data[i].x, Data[i].y);
for(var j=i+1;j<Number;j++)
{
if(Math.pow(Data[i].x-
Data[j].x,2)+Math.pow(Data[i].y-Data[j].y,2<2000)
{
line(Data[i].x,Data[i].y,Data[j].x,Data[j].y);
}
}
}
}
}
setInterval("Motion()","200"); //定时调用,让粒子运动
</script>

    在写下合格粒子运动时要先清楚你的思路,不能一开始就盲目的开始写,首先先要确定思路然后在去一步步的实现,在写的过程要注意细节,要思考js有些知识是跟数学知识相关的要注意观察

1要创建一个画布

2要创建粒子

3让粒子能够运动起来

粒子运动不是粒子真正的在动,而是不断的重画

3判断粒子勾成连线的条件(用勾股定理)

js用canvans 实现简单的粒子运动的更多相关文章

  1. JS基础(超级简单)

    1     JS基础(超级简单) 1.1 数据类型 1.1.1   基本类型: 1)        Number:特别注意:NaN的检测方法:Nan!=NaN;或者使用isNaN方法 2)       ...

  2. JS去掉首尾空格 简单方法大全(原生正则jquery)

    JS去掉首尾空格 简单方法大全 var osfipin= ' http://www.cnblogs.com/osfipin/ '; //去除首尾空格 osfipin.replace(/(^\s*)|( ...

  3. js实用方法记录-简单cookie操作

    js实用方法记录-简单cookie操作 设置cookie:setCookie(名称,值,保存时间,保存域); 获取cookie:setCookie(名称); 移除cookie:setCookie(名称 ...

  4. sChart.js:一个小型简单的图表库

    介绍 sChart.js 作为一个小型简单的图表库,没有过多的图表类型,只包含了柱状图.折线图.饼状图和环形图四种基本的图表.麻雀虽小,五脏俱全.sChart.js 基本可以满足这四种图表的需求.而它 ...

  5. Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...

  6. [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...

  7. Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例

    前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...

  8. js中json数据简单处理(JSON.parse()和js中嵌套html)

    js中json数据简单处理(JSON.parse()和js中嵌套html) 一.总结 1.html中嵌套js:<script>js代码</script> 2.js中嵌套html ...

  9. Node.js 环境搭建及简单应用

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型.如果你想创建自己的服务,那么Node.js是一个非 ...

随机推荐

  1. JAVA的特性

    JAVA有三大特性:封装,继承和多态 一. 封装 封装就是将类的信息隐藏在类内部,不允许外部程序直接访问,而是通过该类的方法实现对隐藏信息的操作和访问. 封装的实现 a. 需要修改属性的访问控制符(修 ...

  2. 用samba来创建windows下的文件共享

    前言 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是作为Microsoft的网络 ...

  3. Windows提示 错误: RPC 服务器不可用 解决方法。

    试验环境: 本地主机:win10  ip:192.168.0.10 远程主机: win2008 R2   ip:192.168.1.128 我想要通过systeminfo去获取远程主机的系统信息,但是 ...

  4. Windows Server 2016-图形化之客户端加域(一)

    要使用域环境,您必须将计算机加入域.只有加入域的计算机才能使用域资源.在连接期间,将在域中创建一个计算机帐户,以便将计算机作为成员进行身份验证.前边两节我们写到Windows Server 2016- ...

  5. Kubernetes初探[1]:部署你的第一个ASP.NET Core应用到k8s集群

    Kubernetes简介 Kubernetes是Google基于Borg开源的容器编排调度引擎,作为CNCF(Cloud Native Computing Foundation)最重要的组件之一,它的 ...

  6. 当List<String> list =new ArrayList<String>(20); 他会扩容多少次

    当List<String> list =new ArrayList<String>(20); 他会扩容多少次?A 0       B 1 C 2 D 3答案是A: 因为这个集合 ...

  7. Android开发:Android Studio开发环境配置

    一.android studio下载: 1.Windows版: 下载地址:https://pan.baidu.com/s/1-sg4dN_2B5nn2YJf-C7XLQ 提取码:yedc 2.Mac版 ...

  8. 使用ASP.NET Core支持GraphQL -- 较为原始的方法

    GraphQL简介 下面是GraphQL的定义: GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时. GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述 ...

  9. .netcore 模块积累

    最全的 demo https://github.com/XiaoFaye/netcore-samples http://files.cnblogs.com/files/kellynic/practic ...

  10. Python编程从入门到实践笔记——用户输入和while循环

    Python编程从入门到实践笔记——用户输入和while循环 #coding=utf-8 #函数input()让程序暂停运行,等待用户输入一些文本.得到用户的输入以后将其存储在一个变量中,方便后续使用 ...