js实现三角形粒子运动


Posted in Javascript onSeptember 22, 2020

本文实例为大家分享了js实现三角形粒子运动的具体代码,供大家参考,具体内容如下

效果(这里只是截了一个静态图,实际上里面的粒子是运动状态的):

js实现三角形粒子运动

<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>粒子</title>
 <style>
  * {
   margin: 0;
   padding: 0;
  }

  body {
   overflow: hidden;
  }
 </style>
 <script>
  //随机数获取 3 10 *7+3
  function random(min, max) {
   return Math.random() * (max - min) + min;

  }
  //亮色系
  // colors = ['#7cb5ec', '#434348', '#90ed7d', '#f7a35c', '#8085e9', '#f15c80', '#e4d354', '#8085e8', '#8d4653', '#91e8e1'];
  //暗色系
  colors = ['#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83', '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3']
  //获取窗口宽高
  var width = window.innerWidth;
  var height = window.innerHeight;
  function Bubble() {
   this.r = random(5, 100);
   this.x1 = random(this.r, this.r * 2);
   this.y1 = random(this.r, this.r * 2);
   this.x2 = random(this.r, this.r * 2);
   this.y2 = random(this.r, this.r * 2);
   this.x3 = random(this.r, this.r * 2);
   this.y3 = random(this.r, this.r * 2);
   //随机获取colors数组里的颜色
   this.color = colors[Math.floor(random(0, colors.length))];
   //偏移步长
   this.xr = random(-5, 5);
   this.yr = random(-5, 5);
  }
  Bubble.prototype = {
   //绘制
   draw: function (context) {
    //开始路径
    context.beginPath();
    context.moveTo(this.x1, this.y1);
    context.lineTo(this.x2, this.y2);
    context.lineTo(this.x3, this.y3);
    context.lineTo(this.x1, this.y1);
    context.fillStyle = this.color;
    context.fill();
   },
   //移动
   move: function (context) {
    this.x1 += this.xr;
    this.y1 += this.yr;
    this.x2 += this.xr;
    this.y2 += this.yr;
    this.x3 += this.xr;
    this.y3 += this.yr;
    //边缘检测
    (this.x1 > width || this.x1 < 0) ? this.xr = -this.xr : null;
    (this.y1 > height || this.y1 < 0) ? this.yr = -this.yr : null;
    (this.x2 > width || this.x2 < 0) ? this.xr = -this.xr : null;
    (this.y2 > height || this.y2 < 0) ? this.yr = -this.yr : null;
    (this.x3 > width || this.x3 < 0) ? this.xr = -this.xr : null;
    (this.y3 > height || this.y3 < 0) ? this.yr = -this.yr : null;
    this.draw(context);
   }
  }

  window.onload = function () {
   //获取画布dom
   var canvas = document.querySelector('canvas');
   //设置canvas的宽高
   canvas.width = width;
   canvas.height = height;
   //获取画布上下文对象
   var context = canvas.getContext('2d');
   //数组存储bubble
   var arr = [];
   //生成粒子
   var total = 100;
   //生成例子
   for (var i = 0; i < total; i++) {
    var bubble = new Bubble();
    bubble.draw(context);
    arr.push(bubble);
   }
   var id = setInterval(function () {
    //清除
    context.clearRect(0, 0, width, height);
    //开始移动
    for (var i = 0; i < arr.length; i++) {
     arr[i].move(context);
    }
   }, 1000 / 60)
   //点击次数
   var count = 0;
   canvas.onclick = function () {
    if (count++ % 2 == 0) {
     //停止
     clearInterval(id);
    } else {
     //运行
     id = setInterval(function () {
      //清除
      context.clearRect(0, 0, width, height);
      //开始移动
      for (var i = 0; i < arr.length; i++) {
       arr[i].move(context);
      }
     }, 1000 / 60)
    }
   }
  }
 </script>
</head>

<body>
 <canvas title="点击停止,再次点击活动"></canvas>
</body>

</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQUERY实现左侧TIPS滑进滑出效果示例
Jun 27 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
Feb 02 Javascript
JS正则匹配中文的方法示例
Jan 06 Javascript
js实现三级联动效果(简单易懂)
Mar 27 Javascript
基于Vue2实现的仿手机QQ单页面应用功能(接入聊天机器人 )
Mar 30 Javascript
Vue和Bootstrap的整合思路详解
Jun 30 Javascript
Easyui使用Dialog行内按钮布局的实例
Jul 27 Javascript
vue组件父与子通信详解(一)
Nov 07 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
Dec 08 Javascript
浅谈AngularJS中$http服务的简单用法
May 15 Javascript
如何让vue长列表快速加载
Mar 29 Vue.js
如何在CocosCreator里画个炫酷的雷达图
Apr 16 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
Sep 22 #Javascript
js实现删除json中指定的元素
Sep 22 #Javascript
vue使用canvas实现移动端手写签名
Sep 22 #Javascript
JSON 入门教程基础篇 json入门学习笔记
Sep 22 #Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
Sep 22 #Javascript
Vue实现开关按钮拖拽效果
Sep 22 #Javascript
JS如何生成动态列表
Sep 22 #Javascript
You might like
PHP多线程之内部多线程实例分析
2015/03/09 PHP
PHP单例模式详细介绍
2015/07/01 PHP
PHP回调函数与匿名函数实例详解
2017/08/16 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
2019/05/13 PHP
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
弹出广告特效代码(一个IP只弹出一次)
2007/05/11 Javascript
Prototype Hash对象 学习
2009/07/19 Javascript
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
js创建对象的方法汇总
2016/01/07 Javascript
JS操作JSON方法总结(推荐)
2016/06/14 Javascript
javascript中使用未定义变量或值的情况分析
2016/07/19 Javascript
纯js和css完成贪吃蛇小游戏demo
2016/09/01 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
2016/12/18 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
jQuery DateTimePicker 日期和时间插件示例
2017/01/22 Javascript
jQuery扩展_动力节点Java学院整理
2017/07/05 jQuery
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
深入理解Vue 组件之间传值
2018/08/16 Javascript
this.$toast() 了解一下?
2019/04/18 Javascript
vue实现轮播图帧率播放
2021/01/26 Vue.js
Python中文编码那些事
2014/06/25 Python
Python入门篇之面向对象
2014/10/20 Python
Python3之读取连接过的网络并定位的方法
2018/04/22 Python
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
2018/05/15 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
python字符串判断密码强弱
2020/03/18 Python
HTML5里的placeholder属性使用实例和美化显示效果的方法
2014/04/23 HTML / CSS
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
影视艺术学院毕业生自荐信
2013/11/13 职场文书
兴趣小组活动总结
2014/05/05 职场文书