js用canvans 实现简单的粒子运动
<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 实现简单的粒子运动的更多相关文章
- JS基础(超级简单)
1 JS基础(超级简单) 1.1 数据类型 1.1.1 基本类型: 1) Number:特别注意:NaN的检测方法:Nan!=NaN;或者使用isNaN方法 2) ...
- JS去掉首尾空格 简单方法大全(原生正则jquery)
JS去掉首尾空格 简单方法大全 var osfipin= ' http://www.cnblogs.com/osfipin/ '; //去除首尾空格 osfipin.replace(/(^\s*)|( ...
- js实用方法记录-简单cookie操作
js实用方法记录-简单cookie操作 设置cookie:setCookie(名称,值,保存时间,保存域); 获取cookie:setCookie(名称); 移除cookie:setCookie(名称 ...
- sChart.js:一个小型简单的图表库
介绍 sChart.js 作为一个小型简单的图表库,没有过多的图表类型,只包含了柱状图.折线图.饼状图和环形图四种基本的图表.麻雀虽小,五脏俱全.sChart.js 基本可以满足这四种图表的需求.而它 ...
- Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...
- [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...
- Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例
前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...
- js中json数据简单处理(JSON.parse()和js中嵌套html)
js中json数据简单处理(JSON.parse()和js中嵌套html) 一.总结 1.html中嵌套js:<script>js代码</script> 2.js中嵌套html ...
- Node.js 环境搭建及简单应用
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型.如果你想创建自己的服务,那么Node.js是一个非 ...
随机推荐
- 驰骋工作流引擎-底层开发API 说明文档
驰骋工作引擎-底层开发API 登录与门户API 首先要进行代码集成与组织机构的集成 其次在自己的系统登录界面,登录成功后要执行ccbpm的框架登录. 所谓的登录就是调用ccbpm的登录接口,如左边的代 ...
- markdown 基本操作
无序列表:输入-之后输入空格有序列表:输入数字+“.”之后输入空格任务列表:-[空格]空格 文字标题:ctrl+数字表格:ctrl+t生成目录:[TOC]按回车选中一整行:ctrl+l选中单词:ctr ...
- 网络流 P3358 最长k可重区间集问题
P3358 最长k可重区间集问题 题目描述 对于给定的开区间集合 I 和正整数 k,计算开区间集合 I 的最长 k可重区间集的长度. 输入输出格式 输入格式: 的第 1 行有 2 个正整数 n和 k, ...
- qml demo分析(threadedanimation-线程动画)
一.效果预览 使用过qml的同学都知道,使用qml做动画效果是非常简单的,再也不需要像QWidget那样,自己模拟一个动画,费时又费力,往往还达不到效果.今天我们就来分析下qml的两种动画实现方式,如 ...
- Asp .Net Core 读取appsettings.json配置文件
Asp .Net Core 如何读取appsettings.json配置文件?最近也有学习到如何读取配置文件的,主要是通过 IConfiguration,以及在Program中初始化完成的. ...
- 接口自动化:HttpClient + TestNG + Java(五) - 接口测试数据驱动
在上一篇中,我们实现了post方法请求的封装和测试,这一篇我们做测试数据的分离. 5.1 测试数据处理思路 5.1.1 测试数据分离 这里我想到,我们之前的测试demo里,全都是在testNG类里去写 ...
- 使用redis有序集合sorted set设计高效查询ip所在地
1.将纯真版ip数据 xxx.data 导入至 redis(整个过程只花费了几秒) 引入nuget包 CSRedisCore,使用方法见:https://github.com/2881099/csr ...
- @vue-cli3安装element组件过程
在创建好的项目目录下 执行: vue add element 如图选择对应的选项 安装成功!KO!
- Redis协议规范(RESP)
Redis 即 REmote Dictionary Server (远程字典服务): 而Redis的协议规范是 Redis Serialization Protocol (Redis序列化协议) 该协 ...
- Powershell:关于PSCustomObject你想知道的一切(译)
PSCustomObject是Powershell里非常重要的一个工具,我们先从基础开始然后再循序渐进讲到一些更高级的话题.PSCustomObject旨在于用简单的方法来创建结构化数据.下面的第一个 ...