原生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压缩工具:X2JSCompactor
Jun 13 Javascript
jQuery时间轴插件使用详解
Jul 16 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
Sep 08 Javascript
Angularjs的Controller间通信机制实例分析
Nov 07 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
Apr 17 Javascript
Node中使用ES6语法的基础教程
Jan 05 Javascript
通过jquery的ajax请求本地的json文件方法
Aug 08 jQuery
Vue引用Swiper4插件无法重写分页器样式的解决方法
Sep 27 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
Dec 09 Javascript
说说如何利用 Node.js 代理解决跨域问题
Apr 22 Javascript
JavaScript实现商品评价五星好评
Nov 30 Javascript
JavaScript继承的三种方法实例
May 12 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+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
如何使用PHP对网站验证码进行破解
2015/09/17 PHP
屏蔽PHP默认设置中的Notice警告的方法
2016/05/20 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
JavaScript 和 Java 的区别浅析
2013/07/31 Javascript
JS检测图片大小的实例
2013/08/21 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
2015/05/13 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
深入探讨Vue.js组件和组件通信
2016/09/12 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
javascript变量提升和闭包理解
2018/03/12 Javascript
Vue.js中的组件系统
2019/05/30 Javascript
基于Node.js搭建hexo博客过程详解
2019/06/25 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
javascript前端实现多视频上传
2020/12/13 Javascript
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
python快速排序代码实例
2013/11/21 Python
使用Nginx+uWsgi实现Python的Django框架站点动静分离
2016/03/21 Python
python 简单的绘图工具turtle使用详解
2017/06/21 Python
Python使用当前时间、随机数产生一个唯一数字的方法
2017/09/18 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
在python中将字符串转为json对象并取值的方法
2018/12/31 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
Html5页面中的返回实现的方法
2018/02/26 HTML / CSS
俄罗斯童装网上商店:BebaKids
2020/06/06 全球购物
捷克多品牌在线时尚商店:ANSWEAR.cz
2020/10/03 全球购物
保加利亚服装和鞋类购物网站:Bibloo.bg
2020/11/08 全球购物
英语专业毕业生自荐信
2013/10/28 职场文书
中学生学雷锋活动心得体会
2014/03/10 职场文书
医疗专业毕业生求职信
2014/08/28 职场文书
2014年小学德育工作总结
2014/12/05 职场文书