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 parseInt字符转化为数字函数使用小结
Nov 05 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
Aug 01 Javascript
jQuery弹出层插件Lightbox_me使用指南
Apr 21 Javascript
jquery实现多条件筛选特效代码分享
Aug 28 Javascript
微信小程序 less文件编译成wxss文件实现办法
Dec 05 Javascript
jquery图片放大镜效果
Jun 23 jQuery
Three.js利用顶点绘制立方体的方法详解
Sep 27 Javascript
详解react阻止无效重渲染的多种方式
Dec 11 Javascript
vue动态注册组件实例代码详解
May 30 Javascript
react实现同页面三级跳转路由布局
Sep 26 Javascript
jQuery轮播图功能制作方法详解
Dec 03 jQuery
SSM VUE Axios详解
Oct 05 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对二维数组进行排序的简单实例
2013/12/19 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
如何将一个String和多个String值进行比较思路分析
2013/04/22 Javascript
javascript通过navigator.userAgent识别各种浏览器
2013/10/25 Javascript
Js参数值中含有单引号或双引号问题的解决方法
2013/11/06 Javascript
表单提交前触发函数返回true表单才会提交
2014/03/11 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
2014/12/08 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
Jquery轮播效果实现过程解析
2016/03/30 Javascript
jQuery插件ajaxFileUpload使用实例解析
2016/10/19 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
2017/07/21 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
vue-cli系列之vue-cli-service整体架构浅析
2019/01/14 Javascript
[00:32]2018DOTA2亚洲邀请赛出场——VP
2018/04/04 DOTA
Python中使用pprint函数进行格式化输出的教程
2015/04/07 Python
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
基于windows下pip安装python模块时报错总结
2018/06/12 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
Pytorch中膨胀卷积的用法详解
2020/01/07 Python
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
印度服装购物网站:Limeroad
2018/09/26 全球购物
TCP/IP模型的分界线
2012/12/01 面试题
计算机相关的自我评价
2014/01/15 职场文书
酒店营销策划方案
2014/02/07 职场文书
保险公司年会主持词
2014/03/22 职场文书
毕业生实习证明
2014/09/19 职场文书
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
文明班级申报材料
2014/12/24 职场文书
成绩单家长意见
2015/06/03 职场文书
python如何利用traceback获取详细的异常信息
2021/06/05 Python