js JavaScript实战练习——小球碰撞反弹(详细)

效果如图

在这里插入图片描述

代码如下

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			.wrapper{
				width: 600px;
				height: 600px;
				border: 5px solid black;
				margin: 0 auto;
				position: relative;
			}
			.wrapper .boll{
				width: 80px;
				height: 80px;
				border-radius: 50%;
				background-color: red;
				position: absolute;
				bottom: 0;
				left: 0;
			}
			.box{
				text-align: center;
			}
			.box button{
				width: 200px;
				height: 50px;
				color:white;
				font-size: 30px;
				border: none;
				background-color: green;
			}
			
		</style>
	</head>
	<body>
		<div class="box">
			<div class="wrapper">
				<div class="boll"></div>
			</div>
			<button>开始</button>
		</div>
		<script>
			//获取容器
			var _wrapper=document.querySelector(".wrapper");
			//开始按钮
			var _button=document.querySelector("button");
			//小球
			var _boll=document.querySelector(".boll");
			_button.onclick=function(){
				var speedX=1.5;  //x速度
				var speedY=3;  //y速度
				 var id=setInterval(function(){
					 //获取现有的left和top值
					 //如果到最右边,需要反方向
					 if(_wrapper.clientWidth-_boll.offsetLeft<=_boll.offsetWidth){
						 speedX*=-1;
					 }
					_boll.style.left=(_boll.offsetLeft+speedX)+"px"
					
					 //如果到最上边,需要反方向
					if(_boll.offsetTop<=0){
						speedY*=-1;
					}
					
					_boll.style.top=(_boll.offsetTop-speedY)+"px"
					
					//到最下边,需要反向
					if(_wrapper.clientHeight-_boll.offsetTop<=_boll.offsetHeight){
						speedY*=-1;
					}
					
					//到最左边,需要反向
					if(_boll.offsetLeft<=0){
						speedX*=-1;
					}
				 },10)
			}
		</script>
	</body>
</html>
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现小球与边框的碰撞反弹,可以通过以下步骤来实现: 1. 获取小球和边框的位置和大小信息。 2. 计算小球的运动方向和速度。 3. 检测小球是否与边框相碰撞,如果相碰撞,则需要更新小球的运动方向和速度。 4. 更新小球的位置,使其运动到下一个位置。 5. 不断循环执行上述步骤,实现小球的运动。 以下是一个简单的示例代码,可以参考一下: ```javascript // 获取小球和边框的位置和大小信息 var ball = document.getElementById("ball"); var ballWidth = ball.offsetWidth; var ballHeight = ball.offsetHeight; var ballX = ball.offsetLeft; var ballY = ball.offsetTop; var container = document.getElementById("container"); var containerWidth = container.offsetWidth; var containerHeight = container.offsetHeight; var containerX = container.offsetLeft; var containerY = container.offsetTop; // 计算小球的运动方向和速度 var speedX = 5; var speedY = 5; // 检测小球是否与边框相碰撞 function checkCollision() { if (ballX <= containerX || ballX + ballWidth >= containerX + containerWidth) { speedX = -speedX; // 更新水平方向的速度 } if (ballY <= containerY || ballY + ballHeight >= containerY + containerHeight) { speedY = -speedY; // 更新垂直方向的速度 } } // 更新小球的位置 function updatePosition() { ballX += speedX; ballY += speedY; ball.style.left = ballX + "px"; ball.style.top = ballY + "px"; } // 循环执行碰撞检测和位置更新 setInterval(function() { checkCollision(); updatePosition(); }, 50); ``` 在上述代码中,我们首先获取了小球和边框的位置和大小信息,然后定义了小球的运动方向和速度。在每次循环中,我们检测小球是否与边框相碰撞,如果相碰撞,则更新小球的运动方向和速度。最后,我们更新小球的位置,使其运动到下一个位置。循环执行碰撞检测和位置更新,实现小球的运动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值