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 iframe编程相关代码
Dec 28 Javascript
js的表单操作 简单计算器
Dec 29 Javascript
js中传递特殊字符(+,&amp;)的方法
Jan 16 Javascript
js设置控件的隐藏与显示的两种方法
Aug 21 Javascript
新手快速学习JavaScript免费教程资源汇总
Jun 25 Javascript
javascript仿百度输入框提示自动下拉补全
Jan 07 Javascript
AngularJS入门教程之更多模板详解
Aug 19 Javascript
深入学习 JavaScript中的函数调用
Mar 23 Javascript
微信小程序request请求后台接口php的实例详解
Sep 20 Javascript
JavaScript遍历数组和对象的元素简单操作示例
Jul 09 Javascript
bootstrap table实现iview固定列的效果实例代码详解
Sep 30 Javascript
如何基于JS截获动态代码
Dec 25 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
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
php处理斐波那契数列非递归方法
2012/02/04 PHP
深入理解PHP中的global
2014/08/19 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
2020/09/15 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
js每次Title显示不同的名言
2008/09/25 Javascript
jQuery Clone Bug解决代码
2010/12/22 Javascript
Jquery进度条插件 Progress Bar小问题解决
2011/07/12 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
JS文本框追加多个下拉框的值的简单实例
2013/07/12 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
全系IE支持Bootstrap的解决方法
2015/10/19 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
AngularJS Ajax详解及示例代码
2016/08/17 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
微信小程序渲染性能调优小结
2019/07/30 Javascript
Python切片知识解析
2016/03/06 Python
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
使用Python实现分别输出每个数组
2019/12/06 Python
Python中实现输入一个整数的案例
2020/05/03 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
常用的10个Python实用小技巧
2020/08/10 Python
教导处工作制度
2014/01/18 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
2015年物业管理工作总结
2015/04/23 职场文书
电工实训心得体会
2016/01/14 职场文书
2016领导干部廉洁从政心得体会
2016/01/19 职场文书
2019年二手房买卖合同范本
2019/10/14 职场文书