原生js canvas实现鼠标跟随效果


Posted in Javascript onAugust 02, 2020

本文实例为大家分享了canvas实现鼠标跟随效果的具体代码,供大家参考,具体内容如下

效果展示:

原生js canvas实现鼠标跟随效果

源码展示:

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>canvas鼠标跟随效果(原生js实现)</title>
  <script src="http://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script>
  <style>
    * {
      margin:0;
      padding:0;
    }
    body {
      overflow:hidden;
    }
    #myCanvas {
      background-color:#000;
    }
  </style>
</head>
<body>
<canvas id="myCanvas"></canvas>
 
<script>
  var myCanvas = document.getElementById('myCanvas');
  var ctx = myCanvas.getContext("2d");
  var starlist = [];
 
  function init() {
    // 设置canvas区域的范围为整个页面
    myCanvas.width = window.innerWidth;
    myCanvas.height = window.innerHeight;
  };
  init();
  // 监听屏幕大小改变 重新为canvas大小赋值
  window.onresize = init;
 
  // 当鼠标移动时 将鼠标坐标传入构造函数 同时创建一个对象
  myCanvas.addEventListener('mousemove', function(e) {
    // 将对象push到数组中,画出来的彩色小点可以看作每一个对象中记录着信息 然后存在数组中
    starlist.push(new Star(e.offsetX, e.offsetY));
  });
 
  // 随机数函数
  function random(min, max) {
    // 设置生成随机数公式
    return Math.floor((max - min) * Math.random() + min);
  };
 
 
  // 构造函数
  function Star(x, y) {
    // 将坐标存在每一个点的对象中
    this.x = x;
    this.y = y;
    // 设置随机偏移量
    this.vx = (Math.random() - 0.5) * 3;
    this.vy = (Math.random() - 0.5) * 3;
    this.color = 'rgb(' + random(0, 256) + ',' + random(0, 256) + ',' + random(0, 256) + ')';
    // 初始透明度
    this.a = 1;
    // 开始画
    this.draw();
  }
 
  // 再star对象原型上封装方法
  Star.prototype = {
    // canvas根据数组中存在的每一个对象的小点信息开始画
    draw: function() {
      ctx.beginPath();
      ctx.fillStyle = this.color;
      // 图像覆盖 显示方式 lighter 会将覆盖部分的颜色重叠显示出来
      ctx.globalCompositeOperation = 'lighter'
      ctx.globalAlpha = this.a;
      ctx.arc(this.x, this.y, 30, 0, Math.PI * 2, false);
      ctx.fill();
      this.updata();
    },
    updata: function() {
      // 根据偏移量更新每一个小点的位置
      this.x += this.vx;
      this.y += this.vy;
      // 透明度越来越小
      this.a *= 0.98;
    }
  }
  // 渲染
  function render() {
    // 每一次根据改变后数组中的元素进行画圆圈 把原来的内容区域清除掉
    ctx.clearRect(0, 0, myCanvas.width, myCanvas.height)
 
    // 根据存在数组中的每一位对象中的信息画圆
    starlist.forEach(function(ele, i) {
      ele.draw();
      // 如果数组中存在透明度小的对象 ,给他去掉 效果展示逐渐消失
      if (ele.a < 0.05) {
        starlist.splice(i, 1);
      }
    });
    requestAnimationFrame(render);
  }
  render();
</script>
<pre style="color:red">
 感: 最近贡献一下我在教学中的小案例可以能给你一些帮助 ,希望继续关注我的博客
                                        --王
</pre> 
 
</body>
</html>

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

Javascript 相关文章推荐
JavaScript Undefined,Null类型和NaN值区别
Oct 22 Javascript
由JavaScript技术实现的web小游戏(不含网游)
Jun 12 Javascript
Node.js实战 建立简单的Web服务器
Mar 08 Javascript
js触发asp.net的Button的Onclick事件应用
Feb 02 Javascript
javaScript实现浮点数转十六进制字符
Oct 29 Javascript
jQuery对象初始化的传参方式
Feb 26 Javascript
js点击返回跳转到指定页面实现过程
Aug 20 Javascript
js中数组的常用方法小结
Dec 30 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
Nov 10 Javascript
JavaScript实现多球运动效果
Sep 07 Javascript
nuxt 实现在其它js文件中使用store的方式
Nov 05 Javascript
Vue实现随机验证码功能
Dec 29 Vue.js
原生js+canvas实现下雪效果
Aug 02 #Javascript
jQuery实现滑动开关效果
Aug 02 #jQuery
jQuery实现开关灯效果
Aug 02 #jQuery
JavaScript实现动态生成表格
Aug 02 #Javascript
javascript实现京东登录显示隐藏密码
Aug 02 #Javascript
Vue scoped及deep使用方法解析
Aug 01 #Javascript
Vue中computed及watch区别实例解析
Aug 01 #Javascript
You might like
PHP实现权限管理功能示例
2017/09/22 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
2019/12/02 PHP
escape、encodeURI 和 encodeURIComponent 的区别
2009/03/02 Javascript
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
2013/06/17 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
使用Browserify配合jQuery进行编程的超级指南
2015/07/28 Javascript
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
2017/05/30 Javascript
Node学习记录之cluster模块
2017/05/31 Javascript
Vue中之nextTick函数源码分析详解
2017/10/17 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
python+mysql实现简单的web程序
2014/09/11 Python
Python迭代器和生成器介绍
2015/03/06 Python
Python找出list中最常出现元素的方法
2016/06/14 Python
Python开发的HTTP库requests详解
2017/08/29 Python
浅谈机器学习需要的了解的十大算法
2017/12/15 Python
TensorFlow 模型载入方法汇总(小结)
2018/06/19 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
Python设计模式之职责链模式原理与用法实例分析
2019/01/11 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
2020/07/14 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
纯CSS改变webkit内核浏览器的滚动条样式
2014/04/17 HTML / CSS
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
香港莎莎官网Sasa.com:亚洲著名国际化妆品商城
2019/11/10 全球购物
瑞士首家网上药店折扣店:McDrogerie
2020/12/22 全球购物
幼儿园教师国培感言
2014/02/02 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书
感谢信怎么写
2015/01/21 职场文书
2015年小学一年级班主任工作总结
2015/05/21 职场文书
家长会后的感想
2015/08/11 职场文书
高一化学教学反思
2016/02/22 职场文书
使用CSS连接数据库的方式
2022/02/28 HTML / CSS
python热力图实现的完整实例
2022/06/25 Python