弹跳运动 拖拽+运动 重力场模拟

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>Document</title>

<style>

div{

width:100px;

height:100px;

background:orange;

position:absolute;

left:0;

top:0;

border-radius: 50%;

}

</style>

</head>

<body>

<div></div>

<script>

var div=document.getElementsByTagName('div')[0];

var newLeft,newTop;

var speedX,speedY;

var lastLeft,lastY;

 

lastLeft=div.offsetLeft;

lastTop=div.offsetTop;

//拖拽功能

div.onmousedown=function(ev){

var eve=window.event||ev;

var disX,disY;

disX=eve.clientX-div.offsetLeft;

disY=eve.clientY-div.offsetTop;

 

document.onmousemove=function(ev){

//鼠标移动后的坐标

var eve=window.event||ev;

newLeft=eve.clientX-disX;

newTop=eve.clientY-disY;

//速度=物体新坐标-老坐标

speedX=newLeft-lastLeft;

speedY=newTop-lastTop;

lastLeft=newLeft;

lastTop=newTop;

 

div.style.left=newLeft+"px";

div.style.top=newTop+"px";

 

}

document.onmouseup=function(){

document.onmousemove=null;

document.onmouseup=null;

startMove(div,speedX,speedY);

 

}

}

function startMove(obj,speedX,speedY){

clearInterval(obj.timer);

var g=2;

obj.timer=setInterval(function(){

speedY+=g;

newLeft=obj.offsetLeft+speedX;

newTop=obj.offsetTop+speedY;

if(newTop>=document.documentElement.clientHeight-obj.offsetHeight){

speedY*=-1;//碰壁后反方向运动

speedX*=0.8;

speedY*=0.8;//模仿重力场 给物体一个摩擦系数 碰壁的时候会有摩擦所以需要降速

//只要碰撞 横向和纵向的速度都会降低 慢慢慢慢就变到不到一的速度,最后停下

newTop=document.documentElement.clientHeight-obj.offsetHeight;

}else if(newTop<0){

newTop=0;

speedY*=-1;

speedY*=0.8;

speedX*=0.8;

 

}

if(newLeft>=document.documentElement.clientWidth-obj.offsetWidth){

newLeft=document.documentElement.clientWidth-obj.offsetWidth;

speedX*=-1;

speedX*=0.8;

speedY*=0.8;

}else if(newLeft<0){

newLeft=0;

speedX*=-1;

speedX*=0.8;

speedY*=0.8;

}

obj.style.left=newLeft+"px";

obj.style.top=newTop+"px";

if(Math.abs(speedX)<1){

speedX=0;

}

if(Math.abs(speedY)<1){

speedY=0;

}

//让物体停止条件 速度为0 并且运动到底部

if(speedX==0&&speedY==0&&newTop==document.documentElement.clientHeight-obj.offsetHeight){

console.log("over");

clearInterval(obj.timer);

}

console.log(speedX);

console.log(speedY);

 

},30);

}

</script>

</body>

</html>

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值