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实现QueryString获取GET参数的方法
Jul 02 Javascript
获得Javascript对象属性个数的示例代码
Nov 21 Javascript
javascript模拟订火车票和退票示例
Apr 24 Javascript
jQuery设置指定网页元素宽度和高度的方法
Mar 25 Javascript
JavaScript中的原型prototype属性使用详解
Jun 05 Javascript
Javascript简单改变表单元素背景的方法
Jul 15 Javascript
基于JavaScript实现简单的随机抽奖小程序
Jan 05 Javascript
bootstrap3-dialog-master模态框使用详解
Aug 22 Javascript
vue-router 源码实现前端路由的两种方式
Jul 02 Javascript
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
Sep 25 Javascript
node express使用HTML模板的方法示例
Aug 22 Javascript
用Angular实现一个扫雷的游戏示例
May 15 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
一个捕获函数输出的函数
2007/02/14 PHP
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
PHP中设置时区方法小结
2012/06/03 PHP
PHP的curl实现get,post和cookie(实例介绍)
2013/06/17 PHP
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
php断点续传之如何分割合并文件
2014/03/22 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
JS简单实现元素复制示例附图
2013/11/19 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
2015/03/14 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
javascript中CheckBox全选终极方案
2015/05/20 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
2015/10/29 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
2019/09/05 Javascript
Python正则表达式如何进行字符串替换实例
2016/12/28 Python
Python输入二维数组方法
2018/04/13 Python
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
python DataFrame 取差集实例
2019/01/30 Python
python抓取搜狗微信公众号文章
2019/04/01 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
python3调用windows dos命令的例子
2019/08/14 Python
Python爬取365好书中小说代码实例
2020/02/28 Python
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用?
2014/03/05 面试题
移动通信专业自荐信范文
2013/11/12 职场文书
门面房租房协议书
2014/08/20 职场文书
普宁寺导游词
2015/02/04 职场文书
婚礼父母致辞
2015/07/28 职场文书
心得体会该怎么写呢?
2019/06/27 职场文书
Pandas数据类型之category的用法
2021/06/28 Python
Apache Linkis 中间件架构及快速安装步骤
2022/03/16 Servers