• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JavaScript > Canvas 绘制粒子动画背景

Canvas 绘制粒子动画背景

作者:曾阿牛 字体:[增加 减小] 来源:互联网 时间:2017-05-11

曾阿牛通过本文主要向大家介绍了canvas粒子动画,canvas粒子,canvas粒子效果,canvas粒子特效,canvas 粒子运动等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

效果如下:

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<style>
 *{
  margin:0px;
  padding:0px;
 }
 body{
  background:#000;
 }
 canvas{
  position:absolute;
  width:100%;
  height:100%;
 }
</style>
<body>
<canvas id="canvas">您的浏览器不支持,请升级最新的版本!</canvas>
<script>window.requestAnimFrame = ( function() {
 return window.requestAnimationFrame ||
   window.webkitRequestAnimationFrame ||
   window.mozRequestAnimationFrame ||
   function( callback ) {
    window.setTimeout( callback, 1000 / 60 );
   };
})();
var can = document.getElementById("canvas");
var cxt = can.getContext("2d");
can.width = window.innerWidth;
can.height = window.innerHeight;
cxt.lineWidth = 0.3;
//初始链接线条显示位置
var mousePosition = {
 x : 30*can.width/100,
 y : 30*can.height/100
}
//圆形粒子对象参数
var dots = {
 n : 500,//圆形粒子个数
 distance : 50,//圆形粒子之间的距离
 d_radius : 80,//粒子距离鼠标点的距离
 array : []//保存n个圆形粒子对象
}
//创建随机颜色值
function colorValue(min){
 return Math.floor(Math.random()*255 + min);
}
function createColorStyle(r,g,b){
 return "rgba("+r+","+g+","+b+", 1)";
}
//混合两个圆形粒子的颜色
function mixConnect(c1,r1,c2,r2){//圆的颜色 半径
 return (c1*r1+c2*r2)/(r1+r2);
};
//生成线条的颜色
function lineColor(dot1,dot2){//获取具体的圆的颜色再计算
 var color1 = dot1.color,
   color2 = dot2.color;
 var r = mixConnect(color1.r,dot1.radius,color2.r,dot2.radius);
 var g = mixConnect(color1.g,dot1.radius,color2.g,dot2.radius);
 var b = mixConnect(color1.b,dot1.radius,color2.b,dot2.radius);
 return createColorStyle(Math.floor(r),Math.floor(g),Math.floor(b));
}
//生成圆形粒子的颜色对象
function Color(min){
 min = min || 0;
 this.r = colorValue(min);
 this.g = colorValue(min);
 this.b = colorValue(min);
 this.style = createColorStyle(this.r,this.g,this.b);
}
//创建圆形粒子对象
function Dot(){
 //圆形粒子随机圆心坐标点
 this.x = Math.random()*can.width;
 this.y = Math.random()*can.height;
 //x y 方向运动的速度值
 this.vx = -0.5 + Math.random();
 this.vy = -0.5 + Math.random();
 this.radius = Math.random()*5;
 //this.color = "#ff3333";
 this.color = new Color();
}
//绘制出圆形粒子
Dot.prototype.draw = function(){
 cxt.beginPath();
 cxt.fillStyle = this.color.style;
 cxt.arc(this.x,this.y,this.radius,0,Math.PI*2,false);
 cxt.fill();
}
//添加圆形粒子
function createCircle(){
 for (var i=0;i<dots.n ;i++ )
 {
  dots.array.push(new Dot());
 }
}
//绘制出圆形粒子
function drawDots(){
 for (var i=0;i<dots.n ;i++ )
 {
  var dot = dots.array[i];
  dot.draw();
 }
}
//drawDots();
//移动
function moveDots(){
 for (var i=0;i<dots.n ;i++ ){
  var dot = dots.array[i];
  //当圆形粒子对象碰壁的时候就反弹回来
  if (dot.y < 0 || dot.y > can.height)
  {
   dot.vx = dot.vx;
   dot.vy = -dot.vy;
  }else if (dot.x < 0 || dot.x > can.width)
  {
   dot.vx = -dot.vx;
   dot.vy = dot.vy;
  }
  //给圆形粒子圆心坐标加上速度值移动圆形粒子
  dot.x += dot.vx;
  dot.y += dot.vy;
 }
}
//链接粒子对象
function connectDots(){
 for (var i=0;i<dots.n ; i++)
 {
  for ( var j=0;j<dots.n ; j++)
  {
   iDot = dots.array[i];
   jDot = dots.array[j];
   if ((iDot.x - jDot.x) < dots.distance && (iDot.y - jDot.y) < dots.distance && (iDot.x - jDot.x) > -dots.distance && (iDot.y - jDot.y) > -dots.distance)
   {
    if ((iDot.x - mousePosition.x) < dots.d_radius && (iDot.y - mousePosition.y) < dots.d_radius && (iDot.x - mousePosition.x) > -dots.d_radius && (iDot.y - mousePosition.y) > -dots.d_radius)
    {
     cxt.beginPath();
     //cxt.strokeStyle = "yellow";
     cxt.strokeStyle = lineColor(iDot,jDot);
     cxt.moveTo(iDot.x,iDot.y);
     cxt.lineTo(jDot.x,jDot.y);
     cxt.closePath();
     cxt.stroke();
    }
   }
  }
 }
}
createCircle();
//让圆形粒子不断的移动
function animateDots(){
 cxt.clearRect(0,0,can.width,can.height);
 moveDots();
 connectDots()
 drawDots();
 requestAnimFrame(animateDots);
}
animateDots();
can.onmousemove = function(ev){
 var ev = ev || window.event;
 mousePosition.x = ev.pageX;
 mousePosition.y = ev.pageY;
}
can.onmouseout = function(){
 mousePosition.x = can.width/2;
 mousePosition.y = can.height/2;
}
</script>
</body>
</html>
</div>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Canvas 绘制粒子动画背景
  • Canvas + JavaScript 制作图片粒子效果
  • canvas实现粒子时钟效果

相关文章

  • 2017-05-11基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
  • 2017-05-11vue实现ajax滚动下拉加载,同时具有loading效果(推荐)
  • 2017-05-11javascript中json基础知识详解
  • 2017-05-11详解Angular中的自定义服务Service、Provider以及Factory
  • 2017-05-11JS仿JQuery选择器功能
  • 2017-05-11JS实现两周内自动登录功能
  • 2017-05-11JavaScript 数据类型详解
  • 2017-05-11jQuery中Chosen三级联动功能实例代码
  • 2017-05-11react.js 翻页插件实例代码
  • 2017-05-11详解JavaScript树结构

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • jQuery EasyUI Panel面板组件使用详解
    • Javascript 两种刷新方法以及区别和适用范围
    • 详解JS中定时器setInterval和setTImeout的this指向问题
    • JavaScript数据结构之二叉树的查找算法示例
    • 详解Vue2 无限级分类(添加,删除,修改)
    • Google 爬虫如何抓取 JavaScript 的内容
    • 基于jQuery实现滚动刷新效果
    • Angularjs2不同组件间的通信实例代码
    • js图片轮播手动切换特效
    • 为JQuery EasyUI 表单组件增加焦点切换功能的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有