JavaScript canvas实现跟随鼠标事件


Posted in Javascript onFebruary 10, 2020

本文实例为大家分享了用canvas实现跟随鼠标事件的具体代码,供大家参考,具体内容如下

//鼠标移动 展现光片

JavaScript canvas实现跟随鼠标事件

<!DOCTYPE html>
<html>

<head>
 <meta charset="UTF-8">
 <title></title>
 <style>
 body {
 margin: 0;
 overflow: hidden;
 }

 #canvas {
 background: #000;
 }
 </style>
</head>

<body>
 <canvas id="canvas"></canvas>
 <script>
 var canvas = document.getElementById('canvas');
 var context = canvas.getContext('2d');
 var circleList = [];

 canvas.width = window.innerWidth;
 canvas.height = window.innerHeight;

 canvas.addEventListener('mousemove', function (e) {
 // 将对象push到数组中,画出来的彩色小点可以看作每一个对象中记录着信息 然后存在数组中
 circleList.push(new Circle(e.clientX, e.clientY));
 })

 //取x到y之间随机数:Math.round(Math.random()*(y-x)+x) 包括y
 function random(min, max) {
 return Math.round(Math.random() * (max - min) + min);
 }

 function Circle(x, y) {
 this.x = x;
 this.y = y;

 this.vx = (Math.random() - 0.5) * 3; //随机出来一个正数,或者负数。乘3是为了让速度变得大一点
 this.vy = (Math.random() - 0.5) * 3;

 this.color = 'rgb(' + random(0, 255) + ',' + random(0, 255) + ',' + random(0, 255) + ')';

 this.a = 1; // 初始透明度

 this.draw();
 }
 Circle.prototype = {
 draw() {
 context.beginPath();
 context.fillStyle = this.color;
 context.globalCompositeOperation = 'lighter';
 context.globalAlpha = this.a; //全局透明度
 context.arc(this.x, this.y, 30, 0, Math.PI * 2, false);
 context.fill();
 this.update();
 },
 update() {
 // 根据速度更新每一个小圆的位置
 this.x += this.vx;
 this.y += this.vy;
 this.a *= 0.98;
 }
 }

 function render() {
 //把原来的内容区域清除掉
 context.clearRect(0, 0, canvas.width, canvas.height);
 circleList.forEach(function (ele, i) {
 ele.draw();

 if (ele.a < 0.05) {
  circleList.splice(i, 1);
 }
 });

 requestAnimationFrame(render); //动画,会根据浏览器的刷新频率更新动画
 }
 render();
 </script>
</body>

</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 操作cookies及正确使用cookies的属性
Oct 15 Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
Mar 21 Javascript
jquery 模拟类搜索框自动完成搜索提示功能(改进)
May 24 Javascript
javascript动态加载三
Aug 22 Javascript
html的DOM中Event对象onabort事件用法实例
Jan 21 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
May 21 Javascript
JavaScript Ajax实现异步通信
Dec 14 Javascript
vue中路由参数传递可能会遇到的坑
Dec 07 Javascript
webpack 开发和生产并行设置的方法
Nov 08 Javascript
小程序实现按下录音松开识别语音
Nov 22 Javascript
Vue清除定时器setInterval优化方案分享
Jul 21 Javascript
uniapp电商小程序实现订单30分钟倒计时
Nov 01 Javascript
JavaScript实现简易聊天对话框(加滚动条)
Feb 10 #Javascript
node.js使用 http-proxy 创建代理服务器操作示例
Feb 10 #Javascript
node.js中 redis 的安装和基本操作示例
Feb 10 #Javascript
js实现登录拖拽窗口
Feb 10 #Javascript
javascript 原型与原型链的理解及应用实例分析
Feb 10 #Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
Feb 10 #Javascript
node.js使用http模块创建服务器和客户端完整示例
Feb 10 #Javascript
You might like
PHP 用数组降低程序的时间复杂度
2009/12/04 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
PHP使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
Nigma vs Alliance BO5 第五场2.14
2021/03/10 DOTA
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
jQuery弹出下拉列表插件(实现kindeditor的@功能)
2016/08/16 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
2018/08/03 jQuery
angular6 填坑之sdk的方法
2018/12/27 Javascript
封装一下vue中的axios示例代码详解
2020/02/16 Javascript
Python引用模块和查找模块路径
2016/03/17 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
利用Python如何画一颗心、小人发射爱心
2021/02/21 Python
常用的HTML5列表标签
2017/06/20 HTML / CSS
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
澳大利亚游乐场设备品牌:Lifespan Kids
2019/05/24 全球购物
法国在线药房:1001Pharmacies
2021/03/07 全球购物
函授毕业生自我鉴定
2013/11/06 职场文书
大学校园活动策划书
2014/02/04 职场文书
护士毕业生自我鉴定
2014/02/08 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
北京颐和园导游词
2015/01/30 职场文书
党支部综合考察意见
2015/06/01 职场文书
民政局2016年“六一”儿童节慰问活动总结
2016/04/06 职场文书
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL
Python实现双向链表
2022/05/25 Python