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 相关文章推荐
javascript 24小时弹出一次的代码(利用cookies)
Sep 03 Javascript
JQuery toggle使用分析
Nov 16 Javascript
理解Javascript_14_函数形式参数与arguments
Oct 20 Javascript
网易JS面试题与Javascript词法作用域说明
Nov 09 Javascript
jquery 如何动态添加、删除class样式方法介绍
Nov 07 Javascript
使用js获取地址栏中传递的值
Jul 02 Javascript
jquery实现多级下拉菜单的实例代码
Oct 02 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
Nov 07 Javascript
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
Apr 12 Javascript
Node.js数据库操作之查询MySQL数据库(二)
Mar 04 Javascript
react-redux中connect()方法详细解析
May 27 Javascript
Vue.js中的高级面试题及答案
Jan 13 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+java实现自动新闻滚动窗口
2006/10/09 PHP
php 中文处理函数集合
2008/08/27 PHP
php设计模式 Strategy(策略模式)
2011/06/26 PHP
基于PHP技术开发客服工单系统
2016/01/06 PHP
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
flash遮住div问题的正确解决方法
2014/02/27 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
JS实现直接运行html代码的方法
2017/03/13 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
JavaScript常用事件介绍
2019/01/21 Javascript
Angular8引入百度Echarts进行图表分析的实现代码
2019/11/27 Javascript
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
Django1.7+python 2.78+pycharm配置mysql数据库教程
2014/11/18 Python
python正则表达式的使用
2017/06/12 Python
Python 3.6 读取并操作文件内容的实例
2018/04/23 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
将labelme格式数据转化为标准的coco数据集格式方式
2020/02/17 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
Python如何在windows环境安装pip及rarfile
2020/06/15 Python
Tensorflow与Keras自适应使用显存方式
2020/06/22 Python
python中np是做什么的
2020/07/21 Python
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
高中生学习的自我评价
2013/12/14 职场文书
预备党员思想汇报范文
2013/12/29 职场文书
禁止高声喧哗的标语
2014/06/11 职场文书
女性健康讲座主持词
2015/07/04 职场文书
关于flex 上下文中自动 margin的问题(完整例子)
2021/05/20 HTML / CSS
Python使用openpyxl模块处理Excel文件
2022/06/05 Python