您现在的位置是:网站首页> 编程资料编程资料
Canvas跟随鼠标炫彩小球的实现5分钟实现Canvas鼠标跟随动画背景ES6与canvas实现鼠标小球跟随效果canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动html5 canvas实现跟随鼠标旋转的箭头html5使用canvas实现跟随光标跳动的火焰效果
2021-08-30
1512人已围观
简介 这篇文章主要介绍了Canvas跟随鼠标炫彩小球的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
跟随鼠标炫彩小球
canvas没有让我失望,真的很有意思
实现效果
超级炫酷

实现原理
- 创建小球
- 给小球添加随机颜色,随机半径
- 鼠标移动通过实例化,新增小球
- 通过调用给原型新增的方法,来实现小球的动画效果
- 通过定时器不断地更新画布
实现过程
创建小球
通过创建函数收纳小球所有的样式,再通过实例化函数,将鼠标当前的位置传递给Ball函数,让通过实例化创建出来的小球,最后将创建出来的小球存入数组中,数组中以对象形式存放着每个小球的属性和属性值
function Ball(x, y, r) { this.x = x; this.y = y; this.r = r; this.color = getRandom();//随机生成颜色 this.dx = parseInt(Math.random() * 10) - 5;//生成随机移动的位置 this.dy = parseInt(Math.random() * 10) - 5;//`-5`是让小球能向四周随机移动 ballArr.push(this);//添加小球 } //监听鼠标移动事件 canvas.addEventListener('mousemove', function (e) { new Ball(e.offsetX, e.offsetY, parseInt(Math.random() * 20)); /*实例化Ball为Ball对象通过__proto__来调用原型的方法*/ }) 生成随机颜色
对于
color这个属性,可以通过6位16进制的值来表示一种颜色
因此,可以通过随机产生一个6位的16进制数来做为随机颜色
将0到f这16个数存入数组中,通过随机生成6个0到16的索引值,这样就能通过数组的索引号随机的获取6个到0到f中的数了
split的作用是:以括号内的参数为标志符来分割字符串,返回数组
//设置随机颜色 function getRandom() { var allType = '0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f';//16进制颜色 var allTypeArr = allType.split(',');//通过','分割为数组 var color = '#'; for (var i = 0; i < 6; i++) { //随机生成一个0-16的数 var random = parseInt(Math.random() * allTypeArr.length); color += allTypeArr[random]; } return color;//返回随机生成的颜色 } 渲染小球
给函数的原型链中添加
render方法,让每一个通过Ball函数实例化出来的对象,带有这些方法
这个函数的作用是,通过Ball的参数生成一个圆形,在实例化的时候,会生成一个对象,这个对象里就存放的x,y,r这些值
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();//填充 } 更新小球信息
因为生成的小球x,y,r是固定的,所以小球的位置也是固定的,不会改变
因此需要通过改变每个小球的位置和半径让小球动起来,当小球的半径小于0时,调用remove方法将小球从数组中删除
/* 更新小球位置和半径 小于0时清除 */ Ball.prototype.update = function () { this.x += this.dx;//x改变 this.y += this.dy;//y改变 this.r -= 0.1;//半径减小 if (this.r < 0) { this.remove();//调用添加的remove方法 } } 删除小球
这是上面调用的remove方法,当this也就是当前小球半径小于0时i,遍历整个数组,找到这个this,也就是”这个小球“,通过调用数组中的方法,删除掉数组的这个元素
splice(index,num) 方法可删除从 index 处开始删除num个元素
Ball.prototype.remove = function () { for (var i = 0; i < ballArr.length; i++) { if (ballArr[i] == this) { ballArr.splice(i, 1);//找到这个小于0 的元素,删除 } } } 渲染画布
通过定时器,不断的更新画布,主要是这几个步骤
- 清除画布
- 遍历数组,获取到所有小球的信息,渲染到画布上
- 不断的重复调用,更新小球信息
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();//渲染小球 } } }, 20); 完整代码
Document
到此这篇关于Canvas跟随鼠标炫彩小球的实现的文章就介绍到这了,更多相关Canvas跟随鼠标 内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!
相关内容
- 几款流行的HTML5 UI框架比较(小结)使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效移动HTML5前端框架—MUI的使用深入剖析HTML5 内联框架iFrame推荐10个HTML5响应式框架五个2015 年最佳HTML5 框架
- HTML速写之Emmet语法规则的实现Dreamweaver安装emmet插件的图文教程
- 给原生html中添加水印遮罩层的实现示例Html5页面点击遮罩层背景关闭遮罩层HTML实现遮罩层的方法 HTML中如何使用遮罩层
- 使用HTML+Css+transform实现3D导航栏的示例代码html+css+js实现导航栏滚动渐变效果Html5导航栏吸顶方案原理与对比实现html5 横向滑动导航栏的方法示例html+css 实现简易导航栏功能基于html和CSS3制作简单侧边导航栏基于html和CSS3制作酷炫的导航栏使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
- Html5页面播放M4a音频文件HTML5 video循环播放多个视频的方法步骤HTML5 通过Vedio标签实现视频循环播放的示例代码HTML5播放实现rtmp流直播html5视频自动横过来自适应页面且点击播放功能的实现html5中嵌入视频自动播放的问题解决html5 移动端视频video的android兼容(去除播放控件、全屏)HTML5自定义mp3播放器源码HTML5自定义视频播放器源码html5自定义video标签的海报与播放按钮功能解决HTML5中的audio在手机端和微信端的不能自动播放问题
- 利用html+css实现菜单栏缓慢下拉效果的示例代码如何通过 display:olck/none 完成一个菜单栏使用layui实现左侧菜单栏及动态操作tab项的方法Html+Css+Jquery实现左侧滑动拉伸导航菜单栏的示例代码使用HTML+CSS实现鼠标划过的二级菜单栏的示例详解css3 Transition属性(平滑过渡菜单栏案例)菜单栏 “三” 变形为“X”css3过渡动画利用CSS实现几款不错的菜单栏实例代码CSS仿网易首页的头部菜单栏按钮和三角形制作方法纯CSS制作菜单栏当鼠标经过时会变色的
- 使用canvas实现雪花飘动效果的示例代码HTML5 canvas实现雪花飘落特效html5的canvas实现3d雪花飘舞效果
- 前端Html5如何实现分享截图的示例代码HTML5中外部浏览器唤起微信分享功能的代码html5 canvas手势解锁源码分享HTML5中外部浏览器唤起微信分享Html5页面二次分享的实现微信端html5页面调用分享接口示例详解html5 canvas 微信海报分享(个人爬坑)利用HTML5 Canvas制作键盘及鼠标动画的实例分享使用纯HTML5编写一款网页上的时钟的代码分享使用html5 canvas 画时钟代码实例分享HTML5图片预览实例分享
- html5实现可拖拽移动的悬浮图标的示例代码HTML5中在title标题标签里设置小图标的方法HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
- html+css实现图片扫描仪特效 html+css实现充电水滴融合特效代码html+css实现血轮眼轮回眼特效代码
