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 相关文章推荐
JS限制上传图片大小不使用控件在本地实现
Dec 19 Javascript
AngularJS初始化过程分析(引导程序)
Dec 06 Javascript
javascript实现的图片切割多块效果实例
May 07 Javascript
js获取字符串字节数方法小结
Jun 09 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
Oct 16 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
Jun 21 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
Apr 14 Javascript
前端天气插件tpwidget使用方法详解
Jun 24 Javascript
使用Angular material主题定义自己的组件库的配色体系
Sep 04 Javascript
vue实现图片懒加载的方法分析
Feb 05 Javascript
如何手写简易的 Vue Router
Oct 10 Javascript
使用js原生实现年份轮播选择效果实例
Jan 12 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
PHP封装的HttpClient类用法实例
2015/06/17 PHP
php正则提取html图片(img)src地址与任意属性的方法
2017/02/08 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
JavaScript Event学习第十章 一些可替换的事件对
2010/02/10 Javascript
JavaScript prototype属性使用说明
2010/05/13 Javascript
jquery 3D球状导航的文章分类
2010/07/06 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
深入理解javascript作用域和闭包
2014/09/23 Javascript
Javascript 赋值机制详解
2014/11/23 Javascript
jQuery下拉友情链接美化效果代码分享
2015/08/26 Javascript
jquery获取复选框checkbox的值的简单实现方法
2016/05/26 Javascript
JavaScript中的Number数字类型学习笔记
2016/05/26 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
NodeJS遍历文件生产文件列表功能示例
2017/01/22 NodeJs
关于前后端json数据的发送与接收详解
2017/07/30 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
2019/06/27 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
简单介绍Python中的JSON使用
2015/04/28 Python
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
Python3.6安装及引入Requests库的实现方法
2018/01/24 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
python实现比较类的两个instance(对象)是否相等的方法分析
2019/06/26 Python
Django中URL的参数传递的实现
2019/08/04 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
selenium学习教程之定位以及切换frame(iframe)
2021/01/04 Python
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
2013/06/06 HTML / CSS
Reebonz中国官网:新加坡奢侈品购物网站
2017/03/17 全球购物
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
办理退休介绍信
2014/01/09 职场文书
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis
Flutter集成高德地图并添加自定义Maker的实践
2022/04/07 Java/Android