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 相关文章推荐
javascript 动态参数判空操作
Dec 22 Javascript
ie中js创建checkbox默认选中问题探讨
Oct 21 Javascript
使用documentElement正确取得当前可见区域的大小
Jul 25 Javascript
浅谈AngularJs指令之scope属性详解
Oct 24 Javascript
整理一些最近经常遇到的前端面试题
Apr 25 Javascript
jfinal与bootstrap的登出实战详解
Nov 27 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
Dec 22 Javascript
js jquery 获取某一元素到浏览器顶端的距离实现方法
Sep 05 jQuery
vue项目中实现的微信分享功能示例
Jan 21 Javascript
JS面向对象之单选框实现
Jan 17 Javascript
Vuex实现简单购物车
Jan 10 Vue.js
Vue的生命周期一起来看看
Feb 24 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
PHP header函数分析详解
2011/08/06 PHP
php递归删除指定文件夹的方法小结
2015/04/20 PHP
fckeditor上传文件按日期存放及重命名方法
2015/05/22 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
Javascript在IE或Firefox下获取鼠标位置的代码
2009/12/18 Javascript
用js来解决ajax读取页面乱码
2010/11/28 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
javascript实现详细时间提醒信息效果的方法
2015/03/11 Javascript
详谈LABJS按需动态加载js文件
2015/05/07 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
2017/03/27 Javascript
Vue非父子组件通信详解
2017/06/12 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
2019/04/10 jQuery
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
Vue关于组件化开发知识点详解
2020/05/13 Javascript
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
2014/04/25 Python
Python中的两个内置模块介绍
2015/04/05 Python
python爬取各类文档方法归类汇总
2018/03/22 Python
Python内置方法实现字符串的秘钥加解密(推荐)
2019/12/09 Python
python实现简单井字棋游戏
2020/03/04 Python
opencv 图像加法与图像融合的实现代码
2020/07/08 Python
windows10在visual studio2019下配置使用openCV4.3.0
2020/07/14 Python
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
幼儿园教师备课制度
2014/01/12 职场文书
优秀老师事迹材料
2014/02/05 职场文书
五分钟演讲稿
2014/04/30 职场文书
英文感谢信格式
2015/01/21 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS