//该函数的用意为使开发者能直接修改在html中引入该文件的script元素的属性来修改画布的一些属性,画布的z-index,透明度和小方块数量,颜色
//与前面往body元素添加canvas元素的代码配合,当开发者想要使用该特效作为背景时,只需在html文件中添加script元素并引用本文件即可
function getAttr() {
let scripts = document.getElementsByTagName("script"),
len = scripts.length,
script = scripts[len - 1]; //v为最后一个script元素,即引用了本文件的script元素
return {
length: len,
z: script.getAttribute("zIndex") || -1,
opacity: script.getAttribute("opacity") || 0.5,
color: script.getAttribute("color") || "0,0,0",
count: script.getAttribute("count") || 99
}
}
//获得窗口宽高,并设置canvas元素宽高
function getWindowWH() {
W = canvas.width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,
H = canvas.height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
}
//生成随机位置的小方块
var random = Math.random,
squares = []; //存放小方块
//往squares[]数组放小方块
for (let p = 0; p < attr.count; p++) {
var square_x = random() * W,
//横坐标
square_y = random() * H,
//纵坐标
square_xa = 2 * random() - 1,
//x轴位移 -1,1
square_ya = 2 * random() - 1; //y轴位移
squares.push({
x: square_x,
y: square_y,
xa: square_xa,
ya: square_ya,
max: 6000
})
}
//生成鼠标小方块
var mouse = {
x: null,
y: null,
max: 20000
};
//获取鼠标所在坐标
window.onmousemove = function(i) {
//i为W3C DOM,window.event 为 IE DOM,以实现兼容IE
//不过目前似乎IE已经支持W3C DOM,我用的是IE11,我注释掉下一句代码也能实现鼠标交互效果,
//网上说7/8/9是不支持的,本人没有试验,
//当然加上是没有错的
i = i || window.event;
mouse.x = i.clientX;
mouse.y = i.clientY;
}
//鼠标移出窗口后,消除鼠标小方块
window.onmouseout = function() {
mouse.x = null;
mouse.y = null;
}
//绘制小方块,小方块移动(碰到边界反向移动),小方块受鼠标束缚
var animation = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||
function(i) {
window.setTimeout(i, 1000 / 45)
}; //各个浏览器支持的requestAnimationFrame有所不同,兼容各个浏览器
function draw() {
//清除画布
context.clearRect(0, 0, W, H);
var w = [mouse].concat(squares); //连接(合并)鼠标小方块数组和其他小方块数组
var x, v, A, B, z, y;
//square属性表:x,y,xa,ya,max









