原生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 call和apply方法
Nov 24 Javascript
JS+ACTIVEX实现网页选择本地目录路径对话框
Mar 18 Javascript
js中数组Array的一些常用方法总结
Aug 12 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
Jul 29 Javascript
用v-html解决Vue.js渲染中html标签不被解析的问题
Dec 14 Javascript
jQuery获取table下某一行某一列的值实现代码
Apr 07 jQuery
input框中自动展示当前日期yyyy/mm/dd的实现方法
Jul 06 Javascript
vue绑定class与行间样式style详解
Aug 16 Javascript
bootstrap中selectpicker下拉框使用方法实例
Mar 22 Javascript
解决element UI 自定义传参的问题
Aug 22 Javascript
js实现文件上传功能 后台使用MultipartFile
Sep 08 Javascript
ajaxfileupload.js实现上传文件功能
Apr 19 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中常见的mongodb查询操作
2013/06/20 PHP
PHP获取当前url的具体方法全面解析
2013/11/26 PHP
PHP实现bitmap位图排序与求交集的方法
2016/07/28 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
从javascript语言本身谈项目实战
2006/12/27 Javascript
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
javascript与CSS复习(三)
2010/06/29 Javascript
document.getElementById的简写方式(获取id对象的简略写法)
2010/09/10 Javascript
jQuery之选择组件的深入解析
2013/06/19 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
JavaScript递归操作实例浅析
2016/10/31 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
利用jQuery异步上传文件的插件用法详解
2017/07/19 jQuery
JavaScript引用类型之基本包装类型实例分析【Boolean、Number和String】
2018/08/09 Javascript
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
2016/01/20 Python
Python反射用法实例简析
2017/12/22 Python
详解Python之unittest单元测试代码
2018/01/24 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
python交互模式下输入换行/输入多行命令的方法
2019/07/02 Python
pandas对dataFrame中某一个列的数据进行处理的方法
2019/07/08 Python
Python 异步协程函数原理及实例详解
2019/11/13 Python
Python列表list操作相关知识小结
2020/01/29 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
500行python代码实现飞机大战
2020/04/24 Python
利用python下载scihub成文献为PDF操作
2020/07/09 Python
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
锐步英国官网:Reebok英国
2019/11/29 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
现金会计岗位职责
2013/12/05 职场文书
客户经理岗位职责
2013/12/08 职场文书
大学生党员自我批评思想汇报
2014/10/10 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
给校长的建议书范文
2015/09/14 职场文书