盒子类重力感应拖拽效果:
拖拽盒子,放开后盒子会类似皮球一样带重力并有碰撞运动
代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style>
#div1
{
width:100px;
height:100px;
background-color:#F00;
position:absolute;
left:0;
top:0;
}
#but1
{
position:absolute;
top:100px;
}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
window.οnlοad=function()
{
var oDiv=document.getElementById("div1");
lastX=l=document.documentElement.clientWidth/2-oDiv.offsetWidth;
lastY=document.documentElement.clientHeight/2-oDiv.offsetHeight;
oDiv.style.left=lastX+'px';
oDiv.style.top=lastY+'px'; //让初始值在页面中间
//为盒子鼠标加事件
oDiv.οnmοusedοwn=function(ev) //鼠标按下事件
{
clearInterval(timer);
var oEvent=ev||event;
var disX=oEvent.clientX-oDiv.offsetLeft;
var disY=oEvent.clientY-oDiv.offsetTop;
document.οnmοusemοve=function(ev) //鼠标移动事件
{
var oEvent=ev||event;
var l=oEvent.clientX-disX;
var t=oEvent.clientY-disY;
oDiv.style.left=l+'px';
oDiv.style.top=t+'px';
iSpeedX=l-lastX;
iSpeedY=t-lastY;
lastX=l;
lastY=t;
};
document.οnmοuseup=function() //鼠标抬起事件
{
document.οnmοusemοve=null;
document.οnmοuseup=null;
starMove();
};
};
};
//重力运动事件
var iSpeedX=12;
var iSpeedY=0;
var timer=null;
function starMove()
{
clearInterval(timer);
var oDiv=document.getElementById("div1");
timer=setInterval(function(){
var l=oDiv.offsetLeft+iSpeedX;
var t=oDiv.offsetTop+iSpeedY;
if(t>(document.documentElement.clientHeight-oDiv.offsetHeight))
{
t=document.documentElement.clientHeight-oDiv.offsetHeight; //保证不走出页面
iSpeedY*=-0.8;
iSpeedX*=0.8; //碰撞后改变方向并有碰撞损失
}
if(l>(document.documentElement.clientWidth-oDiv.offsetWidth))
{
l=document.documentElement.clientWidth-oDiv.offsetWidth;
iSpeedX*=-0.8;
}
if(t<0)
{
t=0;
iSpeedY*=-0.8;
iSpeedX*=0.8;
}
if(l<0)
{
l=0;
iSpeedX*=-0.8;
}
else
{
iSpeedY+=3;
}
if(Math.abs(iSpeedX)<0.5)
{
iSpeedX=0;
}
if(Math.abs(iSpeedY)<0.5)
{
iSpeedY=0;
}
if(iSpeedX==0&&iSpeedY==0&&t==(document.documentElement.clientHeight-oDiv.offsetHeight)) //停止条件(x和y方向速度 都为0,并且到达页面框的最下边)
{
clearInterval(timer);
}
else
{
oDiv.style.left=l+'px';
oDiv.style.top=t+'px';
}
},30);
}
</script>
</head>
<body>
<div id="div1"></div>
</body>
</html>