原生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 Map 和 List 的简单实现代码
Jul 08 Javascript
js数组转json并在后台对其解析具体实现
Nov 20 Javascript
jquery easyui combox一些实用的小方法
Dec 25 Javascript
JavaScript实现两个Table固定表头根据页面大小自行调整
Jan 03 Javascript
jQuery照片伸缩效果不影响其他元素的布局
May 09 Javascript
Jquery 全选反选实例代码
Nov 19 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
Jan 20 Javascript
微信小程序实现图片自适应(支持多图)
Jan 25 Javascript
jquery中each循环的简单回滚操作
May 05 jQuery
H5上传本地图片并预览功能
May 08 Javascript
Vue 递归多级菜单的实例代码
May 05 Javascript
el-select 下拉框多选实现全选的实现
Aug 02 Javascript
原生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的垃圾回收机制详解
2013/10/28 PHP
PHP SPL使用方法和他的威力
2013/11/12 PHP
php日历制作代码分享
2014/01/20 PHP
基于php的微信公众平台开发入门实例
2015/04/15 PHP
基于PHP微信红包的算法探讨
2016/07/21 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
用Javascript实现锚点(Anchor)间平滑跳转
2009/09/08 Javascript
几个javascript操作word的参考代码
2009/10/26 Javascript
jquery 读取页面load get post ajax 四种方式代码写法
2011/04/02 Javascript
jquery操作复选框(checkbox)的12个小技巧总结
2014/02/04 Javascript
js/jquery获取文本框输入焦点的方法
2014/03/04 Javascript
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
jQuery实现设置、移除文本框默认值功能
2015/01/13 Javascript
js Dom实现换肤效果
2017/10/21 Javascript
javaScript中&quot;==&quot;和&quot;===&quot;的区别详解
2018/03/16 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
2018/12/13 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
Python scikit-learn 做线性回归的示例代码
2017/11/01 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
python3文件复制、延迟文件复制任务的实现方法
2019/09/02 Python
python爬虫库scrapy简单使用实例详解
2020/02/10 Python
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
市场营销专业个人自荐信格式
2013/09/21 职场文书
前台文员的岗位职责
2013/11/14 职场文书
会计顶岗实习心得
2014/01/25 职场文书
干部个人考察材料
2014/12/24 职场文书
个人工作能力自我评价
2015/03/05 职场文书
毕业生自我鉴定范文
2019/05/13 职场文书
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python