<html>
<head>
<meta charset="utf-8">
<title>看看运动轨迹 松手自动回到原点2</title>
<style type="text/css">
.div1{
height:100px;
width:100px;
background:#f00;
position: absolute;
border-radius: 50%;
}
.d{
width:2px;
height:2px;
background:#000;
position: absolute;
}
</style>
<script type="text/javascript">
window.onload=function(){
var oDiv=document.getElementsByTagName("div")[0];
var oButton=document.getElementById("btn1");
var ispeedX=5;
var ispeedY=4;
var old_left=0;
var old_top=0;
var xzyinzi=0.7; //值越接近1 弹性越好
oButton.onclick=function(){
startMove(oDiv);
}
oDiv.onmousedown=function(ev){
var oEvent=ev||event;
var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
var scrollLeft=document.documentElement.scrollLeft||document.body.scrollLeft;
var evx=oEvent.clientX-oDiv.offsetLeft+scrollLeft;
var evy=oEvent.clientY-oDiv.offsetTop+scrollTop;
document.onmousemove=function(ev){
var oEvent=ev||event;
var curx=scrollTop+oEvent.clientX;
var cury=scrollLeft+oEvent.clientY;
var left_t=curx-evx;
var top_t=cury-evy;
var oWinWidth=document.body.clientWidth||document.documentElement.clientWidth;
var oWinHeight=document.body.clientHeight||document.documentElement.clientHeight;
//限制不能出界
if(left_t<0){
left_t=0;
}else if(left_t>oWinWidth-oDiv.offsetWidth){
left_t=oWinWidth-oDiv.offsetWidth;
}
if(top_t<0){
top_t=0;
}else if(top_t>oWinHeight-oDiv.offsetHeight){
top_t=oWinHeight-oDiv.offsetHeight;
}
ispeedX=left_t-old_left;
ispeedY=top_t-old_top;
oDiv.style.left=left_t+"px";
oDiv.style.top=top_t+"px";
old_left=left_t;
old_top=top_t;
return false;
}
document.onmouseup=function(){
document.onmousemove=null;
document.onmouseup=null;
startMove(oDiv);
}
}
function startMove(obj){
clearInterval(obj.timer);
var oWinWidth=document.body.clientWidth||document.documentElement.clientWidth;
var oWinHeight=document.body.clientHeight||document.documentElement.clientHeight;
obj.timer=setInterval(function(){
ispeedY+=1; //值越大 物体越重
var left=oDiv.offsetLeft+ispeedX;
var top=oDiv.offsetTop+ispeedY;
if(left>oWinWidth-oDiv.offsetWidth){
left=oWinWidth-oDiv.offsetWidth;
ispeedX*=-xzyinzi;
}else if(left<0){
left=0;
ispeedX*=-xzyinzi;
}
if(top>=oWinHeight-oDiv.offsetHeight){
top=oWinHeight-oDiv.offsetHeight;
ispeedY*=-xzyinzi;
ispeedX*=xzyinzi; //不管上下怎么碰撞,x 左右的运动时时刻刻都在减小
}else if(top<0){
ispeedY*=-1;
ispeedX*=xzyinzi; //不管上下怎么碰撞,x 左右的运动时时刻刻都在减小
top=0;
}
//判断,当上下的速度的绝对值小于1,就停止
if(Math.abs(ispeedY)<1){
ispeedY=0;
}
if(Math.abs(ispeedX)<1){
ispeedX=0;
}
if(ispeedY==0 && ispeedX==0 && top==oWinHeight-oDiv.offsetHeight){
clearInterval(obj.timer);
document.title="top:"+oWinHeight+"-------"+(oWinHeight-oDiv.offsetHeight);
}else{
oDiv.style.left=left+"px";
oDiv.style.top=top+"px";
}
},5);
}
}
function getWindowSize(){
var width=document.documentElement.clientWidth||document.body.clientWidth;
var height=document.documentElement.clientHeight||document.body.clientHeight;
return {"h":height,"w":width};
}
function getStyle(obj,cssName){
if(obj.currentStyle){
return obj.currentStyle[cssName];
}else{
return getComputedStyle(obj,false)[cssName];
}
}
</script>
</head>
<body>
<input type="button" id="btn1" value="运动" />
<div class="div1"></div>
</body>
</html>