案例-多个小球碰撞




<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<style>
		div{
			position: absolute; top:10px;left:0;
			width:50px; height:50px; border-radius:50%; 
			background:-webkit-linear-gradient(top, red, rgba(0, 0, 255, 0.5));
			background:linear-gradient(top, red, rgba(0, 0, 255, 0.5));
		}
	</style>
</head>
<body>
	<script>
		for(var i=1;i<=10;i++){
			// var num = (Math.random()*10+5).toFixed();
			// console.info('num',num);
			createBoll(i);
		}
		function createBoll(num){
			var obj = document.createElement('div');
			obj.style.width = num+20+'px';//设置不一样的大小
			obj.style.height = num+20+'px';//设置不一样的大小
			document.body.appendChild(obj);
			var initX = obj.offsetLeft;
			var initY = obj.offsetTop;
			var maxX = document.documentElement.clientWidth - obj.offsetWidth;
			var maxY = document.documentElement.clientHeight - obj.offsetHeight;
			// var num = 5;
			var speedX = num;
			var speedY = num;

			// console.log('initX',initX, ',clientWidth',document.documentElement.clientWidth,',offsetWidth:',obj.offsetWidth,',maxX:',maxX);
			// console.log('initY',initY, 'clientHeight',document.documentElement.clientHeight,',offsetHeight:',obj.offsetHeight,',maxY:',maxY);

			(function run(){
				initX +=speedX;
				initY +=speedY;
				// if(initX>maxX){
				// 	initX=maxX;
				// 	speedX=-speedX;//速度取反
				// }else if(initX<0){
				// 	initx=0;
				// 	speedX=-speedX;//速度取反
				// }

				// if(initY>maxY){
				// 	initY=maxY;
				// 	speedY=-speedY;//速度取反
				// }else if(initY<0){
				// 	initY=0;
				// 	speedY=-speedY;//速度取反
				// }
				
				// 上面判断代码优化
				if(initX>=maxX || initX<=0){
					initX = Math.min(initX,maxX);
					initX = Math.max(initX,0);
					speedX = -speedX;
					obj.style.background = 'linear-gradient(180deg, '+color()+', '+color()+')';//设置随机渐变色
				}

				if(initY>maxY || initY<=0){
					initY = Math.min(initY,maxY);
					initY = Math.max(initY,0);
					speedY = -speedY;
					obj.style.background = 'linear-gradient(180deg, '+color()+', '+color()+')';//设置随机渐变色
				}
				obj.style.left = initX+'px';
				obj.style.top = initY+'px';
				requestAnimationFrame(run);
			})();
		}

		// console.log(color());
		// 随机颜色
        function color(){
            var r = Math.floor(Math.random()*256);
            var g = Math.floor(Math.random()*256);
            var b = Math.floor(Math.random()*256);
            var a = Math.random().toFixed(1);

            return 'rgba('+r+','+g+','+b+','+a+')';
        }
			
	</script>
</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kaiking_g

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值