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下的keyCode键码值表
Apr 10 Javascript
浅谈轻量级js模板引擎simplite
Feb 13 Javascript
JavaScript检查数字是否为整数或浮点数的方法
Jun 09 Javascript
canvas绘制环形进度条
Feb 23 Javascript
JS实现带动画的回到顶部效果
Dec 28 Javascript
5分钟学会Vue动画效果(小结)
Jul 21 Javascript
Koa代理Http请求的示例代码
Oct 10 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
Nov 08 Javascript
浅谈ECMAScript 中的Array类型
Jun 10 Javascript
原生js实现3D轮播图
Mar 21 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
Nov 07 Javascript
vue常用高阶函数及综合实例
Feb 25 Vue.js
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无法访问远程mysql的问题分析及解决
2013/05/16 PHP
排序算法之PHP版快速排序、冒泡排序
2014/04/09 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
Yii中Model(模型)的创建及使用方法
2015/12/28 PHP
Yii2下点击验证码的切换实例代码
2017/03/14 PHP
javascript Base类 包含基本的方法
2009/07/22 Javascript
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
javascript 子窗体父窗体相互传值方法
2010/05/31 Javascript
JavaScript学习点滴 call、apply的区别
2010/10/22 Javascript
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
详解微信小程序 wx.uploadFile 的编码坑
2017/01/23 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
angular4中关于表单的校验示例
2017/10/16 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
你可能不知道的CORS跨域资源共享
2019/03/13 Javascript
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
vue 使用localstorage实现面包屑的操作
2020/11/16 Javascript
[02:47]3.19DOTA2发布会 国服成长历程回顾
2014/03/25 DOTA
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
python实现电子词典
2020/04/23 Python
Python深入06——python的内存管理详解
2016/12/07 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
2019/08/21 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
2020/04/08 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
化工工艺专业求职信
2013/09/22 职场文书
大学生简历的个人自我评价
2013/12/04 职场文书
2015年维修工作总结
2015/04/25 职场文书
2019初中学生入团申请书
2019/06/27 职场文书