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 相关文章推荐
Prototype使用指南之range.js
Jan 10 Javascript
JavaScript与C# Windows应用程序交互方法
Jun 29 Javascript
Javascript 强制类型转换函数
May 17 Javascript
JS中的异常处理方法分享
Dec 22 Javascript
JavaScript获取路径设计源码
May 22 Javascript
jQuery+ajax实现动态执行脚本的方法
Jan 27 Javascript
浅谈JavaScript正则表达式分组匹配
Apr 10 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
Jun 23 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
Nov 03 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
Jun 08 Javascript
javascript将非数值转换为数值
Sep 13 Javascript
通过实例了解JS 连续赋值
Sep 24 Javascript
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
玛琪朵 Macchiato
2021/03/03 咖啡文化
php模拟服务器实现autoindex效果的方法
2015/03/10 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
通过jQuery打造支持汉字,拼音,英文快速定位查询的超级select插件
2010/06/18 Javascript
扩展jquery实现客户端表格的分页、排序功能代码
2011/03/16 Javascript
StringTemplate遇见jQuery冲突的解决方法
2011/09/22 Javascript
js iframe跨域访问(同主域/非同主域)分别深入介绍
2013/01/24 Javascript
js给selected添加options的方法
2015/05/06 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
简单封装js的dom查询实例代码
2016/07/08 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
web前端vue实现插值文本和输出原始html
2018/01/19 Javascript
vue源码学习之Object.defineProperty 对数组监听
2018/05/30 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
2018/12/12 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
Vue+abp微信扫码登录的实现代码示例
2020/01/06 Javascript
python 获取网页编码方式实现代码
2017/03/11 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
python+selenium实现京东自动登录及秒杀功能
2017/11/18 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
2020/08/20 Python
python3中数组逆序输出方法
2020/12/01 Python
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
世界上最大的在线汽车租赁预订平台:Rentalcars.com(支持中文)
2018/10/12 全球购物
小学教师的自我评价范例
2013/10/31 职场文书
副厂长岗位职责
2014/02/02 职场文书
2019暑假阅读倡议书
2019/06/24 职场文书
Python利用folium实现地图可视化
2021/05/23 Python
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
2021/10/16 Python
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技
基于Python实现西西成语接龙小助手
2022/08/05 Golang