跟随鼠标炫彩小球
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;//返回随机生成的颜色 }
暂无评论内容