1. 程式人生 > >案例-多個小球碰撞

案例-多個小球碰撞


<!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>