日期:2014-05-16 浏览次数:20416 次
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">
#div1{
width:948px; height:40px; overflow:hidden; position:relative; border:1px #efefef solid;
}
#div2{
width:40px; height:40px; overflow:hidden; position:absolute; background-color:#bf0000; top:0px; left:0px;
}
</style>
<script type="text/javascript">
function getById(obj)
{
return document.getElementById(obj);
}
//获取鼠标坐标
function getMouseXY(ev)
{
if(ev.pageX || ev.pageY){
return {x:ev.pageX, y:ev.pageY};
}
return {
x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
y:ev.clientY + document.body.scrollTop - document.body.clientTop
};
}
window.onload=function()
{
var div1=getById('div1');//获取父级ID
var dragDiv=getById('div2');//获取子级ID
var dragDivLeft=0;//模块左坐标
var mouseLeft=0;//鼠标的左坐标
var moveDis=0;//模块的移动距离
dragDiv.style.left=dragDiv.offsetLeft+'px';//给移动模块添加行内样式
var time=[];//向右计时器
var output = function (id, text) {
document.getElementById(id).innerHTML += text + '<br/>';
};//数值返回查看器
div1.onmousemove=function(ev)
{
var oEvent=ev||event;
mouseLeft=getMouseXY(oEvent).x;//获取鼠标左坐标
moveDis=mouseLeft-(dragDiv.getBoundingClientRect().left+dragDiv.offsetWidth);//模块移动的距离=鼠标的左坐标-(模块当前的左坐标+模块自己的宽度)
time.push(setInterval(function () {
dragDivLeft=dragDiv.getBoundingClientRect().left;//模块左坐标
var newmoveDis=mouseLeft-(dragDivLeft+dragDiv.offsetWidth);//模块移动的距离=鼠标的左坐标-(模块当前的左坐标+模块自己的宽度)
//向右
if(moveDis>=0){
//只有当鼠标的左坐标-模块的左坐标>0时,并且模块左坐标+自己的宽度<父级模块的宽度时,模块才能向右移动
if(newmoveDis>=0 && dragDivLeft+dragDiv.offsetWidth<=div1.offsetWidth){
dragDiv.style.left=dragDivLeft+1+'px';
output('p1','右移(模块坐标:'+dragDivLeft + ',鼠标坐标:'+mouseLeft+',移动距离:' + newmoveDis+')');
}
else
{
clearInterval(time.shift());
output('p1','停止(模块坐标:'+dragDivLeft + ',鼠标坐标:'+mouseLeft+',移动距离:' + newmoveDis+')');
}
}
//向左
else if(moveDis<=0)
{
//只有当移动距离<=0,并且模块的左坐标>=0时,模块才能移动
if(newmoveDis<=0 && dragDivLeft>=0){
//这个地方不能相减
dragDiv.style.left=dragDivLeft-1+'px';
output('p1','左移(模块坐标:'+dragDivLeft + ',鼠标坐标:'+mouseLeft+',移动距离:' + newmoveDis+')');
}
else
{
clearInterval(time.shift());
output('p1','停止(模块坐标:'+dragDivLeft + ',鼠标坐标:'+mouseLeft+',移动距离:' + newmoveDis+')');
}
}