JavaScript canvas实现跟随鼠标移动小球


Posted in Javascript onFebruary 09, 2021

本文实例为大家分享了js跟随鼠标移动小球的具体代码,供大家参考,具体内容如下

<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8">
 <title></title>
 <style>
 canvas{
 border: 1px solid #000;
 }
 </style>
 </head>
 <body>
 <canvas id="mycanvas" width="1500" height="800"></canvas>
 <script>
 // 创建画布
 var canvas = document.getElementById('mycanvas');
 var ctx = canvas.getContext('2d');
 // 球类
 function Ball(x, y) {
 this.x = x;
 this.y = y;
 // 初始半径
 this.r = parseInt(Math.random() * 50) + 10;
 this.step = parseInt(Math.random() * 5) + 0.1;
 // 设置随机颜色
 this.color = getRandom();
 // 设置随机方向
 this.dx = parseInt(Math.random() * 10) - 5;
 this.dy = parseInt(Math.random() * 10) - 5;
 // 将自身对象装入数组中
 ballArr.push(this);
 }
 // 在数组中删除对象
 Ball.prototype.remove = function() {
 for (var i = 0; i < ballArr.length; i++) {
 if (ballArr[i] == this) {
 ballArr.splice(i, 1);
 }
 }
 }
 // 更新数据
 Ball.prototype.update = function() {
 // 更新数据
 this.x += this.dx;
 this.y += this.dy;
 this.r -= this.step;
 // 清除数组中的小球
 if (this.r <= 0) {
 this.remove();
 }
 // 如果超出边界,小球继续运动
 if (this.x < 0) {
 this.x = 1500;
 this.color = getRandom();
 }
 else if (this.x > 1500) {
 this.x = 0;
 this.color = getRandom();
 }
 else if (this.y < 0) {
 this.y = 800;
 this.color = getRandom();
 }
 else if (this.y > 800) {
 this.y = 0;
 this.color = getRandom();
 }
 }
 // 渲染小球
 Ball.prototype.render = function() {
 ctx.beginPath();
 ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2, false);
 ctx.fillStyle = this.color;
 ctx.fill();
 }
 // canvas 画布DOM2事件
 canvas.addEventListener("mousemove", function(event) {
 new Ball(event.offsetX, event.offsetY);
 });
 var ballArr = [];
 // 定时器进行动画渲染和更新
 setInterval(function() {
 // 动画逻辑 
 // 清屏-更新-渲染
 ctx.clearRect(0, 0, canvas.width, canvas.height);
 // 小球的更新和渲染
 for (var i = 0; i < ballArr.length; i++) {
 ballArr[i].update();
 if (ballArr[i]) {
 ballArr[i].render();
 }
 }
 }, 30);
 // 随机颜色
 function getRandom() {
 var allType = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f";
 var allTypeArr = allType.split(",");
 var color = "#";
 // 拼接颜色字符串
 for (var i = 0; i < 6; i++) {
 var random = parseInt(Math.random() * allTypeArr.length);
 color += allTypeArr[random];
 }
 return color;
 }
 </script>
 </body>
</html>

效果

JavaScript canvas实现跟随鼠标移动小球

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

Javascript 相关文章推荐
firefox下jquery iframe刷新页面提示会导致重复之前动作
Dec 17 Javascript
js获取会话框prompt的返回值的方法
Jan 10 Javascript
封装了jQuery的Ajax请求全局配置
Feb 05 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
Feb 18 Javascript
JS实现浏览器状态栏显示时间的方法
Oct 27 Javascript
基于JavaScript短信验证码如何实现
Jan 24 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
Aug 09 Javascript
vue2.0 下拉框默认标题设置方法
Aug 22 Javascript
利用jsonp解决js读取本地json跨域的问题
Dec 11 Javascript
layui动态绑定事件的方法
Sep 20 Javascript
微信小程序自定义底部弹出框动画
Nov 18 Javascript
vue基于Teleport实现Modal组件
May 31 Vue.js
javascript实现简单留言板案例
Feb 09 #Javascript
javascript实现下拉菜单效果
Feb 09 #Javascript
用javascript实现倒计时效果
Feb 09 #Javascript
javascript实现倒计时关闭广告
Feb 09 #Javascript
javascript实现固定侧边栏
Feb 09 #Javascript
JavaScript实现前端倒计时效果
Feb 09 #Javascript
Vue+Bootstrap实现简易学生管理系统
Feb 09 #Vue.js
You might like
附件名前加网站名
2008/03/23 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
Javascript中Event属性搜集整理
2013/09/17 Javascript
js opener的使用详解
2014/01/11 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
2015/04/01 Javascript
javascript判断复选框是否选中的方法
2015/10/16 Javascript
JavaScript获取当前运行脚本文件所在目录的方法
2016/02/03 Javascript
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
Python格式化css文件的方法
2015/03/10 Python
Python闭包的两个注意事项(推荐)
2017/03/20 Python
Python实现的删除重复文件或图片功能示例【去重】
2019/04/23 Python
Pandas之groupby( )用法笔记小结
2019/07/23 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
通过HTML5规范搞定i、em、b、strong元素的区别
2017/03/04 HTML / CSS
介绍一下代理模式(Proxy)
2014/10/17 面试题
工商企业管理应届生求职信
2013/11/03 职场文书
车间统计员岗位职责
2014/01/05 职场文书
普通员工辞职信
2014/01/17 职场文书
保密承诺书
2014/03/27 职场文书
体育馆的标语
2014/06/24 职场文书
远程培训的心得体会
2014/09/01 职场文书
挂职个人工作总结
2015/03/05 职场文书
严以修身专题学习研讨会发言材料
2015/11/09 职场文书
大学生活委员竞选稿
2015/11/21 职场文书
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技