原生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经典效果集锦
Jul 06 Javascript
详谈 Jquery Ajax异步处理Json数据.
Sep 09 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
Jan 17 Javascript
把字符串按照特定的字母顺序进行排序的js代码
Jan 28 Javascript
JS实现图片无间断滚动代码汇总
Jul 30 Javascript
浅谈javascript回调函数
Dec 07 Javascript
详解JavaScript中的客户端消息框架设计原理
Jun 24 Javascript
BootStrap Tooltip插件源码解析
Dec 27 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
Oct 08 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
Apr 22 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
Aug 07 Javascript
vue中使用腾讯云Im的示例
Oct 23 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 得到根目录的 __FILE__ 常量
2008/07/23 PHP
php5.4传引用时报错问题分析
2016/01/22 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
JS 退出系统并跳转到登录界面的实现代码
2013/06/29 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
JavaScript获取当前网页最后修改时间的方法
2015/04/03 Javascript
jquery实现的简单二级菜单效果代码
2015/09/22 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
JS动态改变浏览器标题的方法
2016/04/06 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
Bootstrap下拉菜单效果实例代码分享
2016/06/30 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
AngularJS实现根据不同条件显示不同控件
2017/04/20 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
2017/12/25 jQuery
微信小程序-form表单提交代码实例
2019/04/29 Javascript
Python中获取网页状态码的两个方法
2014/11/03 Python
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
Python实现XML文件解析的示例代码
2018/02/05 Python
pandas通过loc生成新的列方法
2018/11/28 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
Linux安装Python3如何和系统自带的Python2并存
2020/07/23 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
Orvis官网:自1856年以来,优质服装、飞钓装备等
2018/12/17 全球购物
Java中实现多态的机制
2015/08/09 面试题
大学校务公开实施方案
2014/03/31 职场文书
驻村工作先进事迹
2014/08/14 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
党员个人承诺书
2015/04/27 职场文书
写给女朋友的保证书
2015/05/09 职场文书
《植树问题》教学反思
2016/03/03 职场文书
Java 定时任务技术趋势简介
2022/05/04 Java/Android