狂欢舞动的小球效果(也就一个html代码):
代码(html):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>滚动的小球</title>
<style>
*{
padding: 0;
margin: 0;
}
body,html{
height: 100%;
background-color: navajowhite;
}
body{
position: relative;
}
div{
border-radius: 50%;
position: absolute;
}
</style>
</head>
<body>
<script>
//页面有20个小球
for(var i=0;i<20;i++){
creatRandomBall(document.body);
}
/*
* div 是要让他成每个div都会镜面反弹
* 这个函数的作用就是实现单个div的镜面反弹效果
* */
function move(div) {
//div所需的最大left和最大top的值
var maxleft = div.parentElement.offsetWidth - div.offsetWidth;
console.log(div.parentElement.offsetWidth);
var maxtop = div.parentElement.offsetHeight - div.offsetHeight;
var directionX = 1;
var directionY = 1;
var speedX = randomNum(1,5);
var speedY = randomNum(1,5);
setTimeout(function step() {
//设置移动的属性
div.style.left = div.offsetLeft + speedX * directionX+"px";
div.style.top = div.offsetTop + speedY * directionY+"px";
console.log(div.style.left);
//判断碰到两头边缘改变direction的值
//这里div.offsetLeft <= 0要小于等于0,找了一个多小时,好心痛啊
if(div.offsetLeft >= maxleft || div.offsetLeft <= 0){
directionX *= -1;
}
if(div.offsetTop >= maxtop || div.offsetTop <= 0){
directionY *= -1;
}
setTimeout(step,10);
},0);
}
/*
* 创建一个元素,随机位置,随机颜色,随机宽高
* 然后把他传给指定的父容器
* */
function creatRandomBall(parent) {
var div = document.createElement("div");
var wh = randomNum(5,120);
div.style.width = wh+"px";
div.style.height = wh+"px";
div.style.left = randomNum(0,parent.offsetWidth - wh)+"px";
div.style.top = randomNum(0,parent.offsetHeight - wh)+"px";
div.style.backgroundColor = "rgba("+randomNum(0,255)+","+randomNum(0,255)+","+randomNum(0,255)+","+Math.random()+")";
parent.appendChild(div);
move(div);
}
/*随机函数最后是+n */
function randomNum(n,m) {
return parseInt(Math.random()*(m-n+1)+n);
}
</script>
</body>
</html>