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 相关文章推荐
jquery及原生js获取select下拉框选中的值示例
Oct 25 Javascript
基于JavaScript获取鼠标位置的各种方法
Dec 16 Javascript
js中实现字符串和数组的相互转化详解
Jan 24 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
Jul 27 Javascript
jQuery根据ID、CLASS、等获取对象的实例
Dec 04 Javascript
jQuery简易时光轴实现方法示例
Mar 13 Javascript
微信小程序 后台登录(非微信账号)实例详解
Mar 31 Javascript
vue中倒计时组件的实例代码
Jul 06 Javascript
解决layui中的form表单与button的点击事件冲突问题
Aug 15 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
Nov 16 Javascript
Vue.js组件间通信方式总结【推荐】
Nov 23 Javascript
利用vue重构有赞商城的思路以及总结整理
Feb 21 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
多文件上载系统完整版
2006/10/09 PHP
PHP 获取MSN好友列表的代码(2009-05-14测试通过)
2009/09/09 PHP
通用PHP动态生成静态HTML网页的代码
2010/03/04 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
2016/03/25 PHP
多个iframe自动调整大小的问题
2006/09/18 Javascript
网页设计常用的一些技巧
2006/12/22 Javascript
分析 JavaScript 中令人困惑的变量赋值
2007/08/13 Javascript
用javascript实现计算两个日期的间隔天数
2007/08/14 Javascript
javascript按位非运算符的使用方法
2013/11/14 Javascript
关于js中for in的缺陷浅析
2013/12/02 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
2013/12/10 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
微信小程序实现收货地址左滑删除
2020/11/18 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
2019/09/25 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
2019/09/26 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
python中的__slots__使用示例
2015/02/26 Python
python采用django框架实现支付宝即时到帐接口
2016/05/17 Python
好用的Python编辑器WingIDE的使用经验总结
2016/08/31 Python
Python实现树莓派WiFi断线自动重连的实例代码
2017/03/16 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
简单了解python的内存管理机制
2019/07/08 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
美国最大的旗帜经销商:Carrot-Top
2018/02/26 全球购物
澳大利亚在线生活方式商店:Mytopia
2018/07/08 全球购物
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
2016幼儿园新学期寄语
2015/12/03 职场文书