弹性小球 ~ 注释详细

弹性小球

源码

css代码

<style type="text/css">
			html,body{
				margin: 0;
				padding: 0;
			}
			#box{
				width: 100px;
				height: 100px;
				border-radius: 50%;
				background: #FF0000;
				position: absolute;
				left: 0;
				top: 0;
			}
		</style>

html代码

<div id="box"></div>

js 代码 注释详细

<script type="text/javascript">
			var oBox = document.getElementById("box");
			var lastX = 0; //最后的位置
			var lastY = 0; //最后的位置
			var speedX = 0; //速度
			var speedY = 0; //速度 
			var timer = null;
			//拖拽
			oBox.onmousedown = function(evt){
				var e = evt || window.event;
				//鼠标的相对坐标值
				var disX = e.offsetX;
				var disY = e.offsetY;
				//右边界值与下边界值
				maxL = document.documentElement.clientWidth - oBox.offsetWidth;
				maxT = document.documentElement.clientHeight - oBox.offsetHeight;
				document.onmousemove = function(evt){
					var e = evt || window.event;
					//当前的坐标值
					var left = e.clientX - disX;
					var top = e.clientY - disY;
					//左边界
					if(left <= 0){
						left = 0;
					}else if(left >= maxL){ //右边界
						left = maxL;
					}
					//上边界
					if(top <= 0){
						top = 0;
					}else if(top >= maxT){
						top = maxT;
					}
					//设置盒子的坐标
					oBox.style.left = left +'px';
					oBox.style.top = top + 'px';
					
					speedX = left - lastX; //设置速度
					speedY = top - lastY; //设置速度
					lastX = left; //最后的位置
					lastY = top; //最后的位置
				}
				document.onmouseup = function(){
					document.onmousemove = null;
					startMove(); //开始运动
				}
				
			}
			
			function startMove(){
				//获取box当前的坐标(被拖拽后)
				var nowX = oBox.offsetLeft;
				var nowY = oBox.offsetTop;
				clearInterval(timer);
				timer = setInterval(function(){
					speedY += 2; //加速
					nowX += speedX; //左右运动
					//判断box是否超出了可移动范围
					if(nowX > maxL){  //右边界
						speedX *= -0.8; //向反向移动,并减速
						nowX = maxL; //当前位置
					}else if(nowX < 0){ //左边界
						speedX *= -0.8; //向反向移动,并减速
						nowX = 0; //当前位置
					}
					nowY += speedY; //上下运动
					if(nowY > maxT){ //下边界
						speedY *= -0.8; //向反向移动,并减速
						speedX *= 0.8; //减速
						nowY = maxT; //当前位置
					}else if(nowY < 0){ //上边界
						speedY *= -1; //反向移动
						speedX *= 0.8; //减速
						nowY = 0; //当前位置
					}
					if(Math.abs(speedX) < 1){
						speedX = 0;
					}
					if(Math.abs(speedY) < 1){
						speedY = 0;
					}
					if(speedX == 0&& speedY == 0 && nowY == maxT){
						clearInterval(timer);
					}
					oBox.style.left = nowX + 'px';
					oBox.style.top = nowY + 'px';
				},16)
			}
		</script>

“时间不在于你拥有多少,而在于你怎样使用”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值