原生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 相关文章推荐
js中将字符串转换成json的三种方式
Jan 12 Javascript
javascript数组去重3种方法的性能测试与比较
Mar 26 Javascript
js使下拉列表框可编辑不止是选择
Dec 12 Javascript
js带闹铃功能的倒计时代码
Sep 29 Javascript
JavaScript实现Fly Bird小游戏
Dec 15 Javascript
jQuery日程管理控件glDatePicker用法详解
Mar 29 jQuery
详解angularjs中如何实现控制器和指令之间交互
May 31 Javascript
总结JavaScript在IE9之前版本中内存泄露问题
Apr 28 Javascript
vue+axios+mock.js环境搭建的方法步骤
Aug 28 Javascript
JavaScript变速动画函数封装添加任意多个属性
Apr 03 Javascript
JavaScript运行机制实例分析
Apr 11 Javascript
jQuery HTML css()方法与css类实例详解
May 20 jQuery
原生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 写文本日志实现代码
2010/05/18 PHP
基于php 随机数的深入理解
2013/06/05 PHP
一些php项目中比较通用的php自建函数的详解
2013/06/06 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
php结合安卓客户端实现查询交互实例
2015/05/05 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
摘自织梦CMS的HTTP文件下载类
2015/08/08 PHP
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
解决Jquery load()加载GB2312页面时出现乱码的两种方案
2013/09/10 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
2014/10/16 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
深入学习jQuery中的data()
2016/12/22 Javascript
js实现消息滚动效果
2017/01/18 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
2017/03/15 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
解决vue props 拿不到值的问题
2018/09/11 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
2018/10/20 Javascript
Angular刷新当前页面的实现方法
2018/11/21 Javascript
详解vue中async-await的使用误区
2018/12/05 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
vant中的toast层级改变操作
2020/11/04 Javascript
[02:15]2015国际邀请赛选手档案IG.Ferrari 430
2015/07/30 DOTA
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
python tkinter canvas使用实例
2019/11/04 Python
Python序列化与反序列化pickle用法实例
2019/11/11 Python
python中not、and和or的优先级与详细用法介绍
2020/11/03 Python
举例讲解Python装饰器
2020/12/24 Python
美国在线面料商店:Fashion Fabrics Club
2020/01/31 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
反邪教警示教育方案
2014/05/13 职场文书
2015年党员承诺书
2015/01/21 职场文书
golang 实现菜单树的生成方式
2021/04/28 Golang
JS ES6异步解决方案
2021/04/29 Javascript
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL