<style type="text/css">
.x
{
background:#0066FF;
position:absolute;
width:300px;
height:300px;
left:30px;
top:80px;
}
</style><script>
var dragapproved=false; function drag(){
if(event.srcElement.id=="dd")
{
dragapproved=true;
var obj =document.getElementById("dd")
var tempX=obj.style.pixelLeft;
var tempY=obj.style.pixelTop;
var x=event.clientX;
var y=event.clientY;
var x2=x-obj.offsetLeft;
var y2=y-obj.offsetTop;
document.onmousemove=move;
function move()
{
if(event.button==1 && dragapproved)
{
obj.style.pixelLeft=event.clientX-x2;
obj.style.pixelTop=event.clientY-y2;
return false;
}
}
}}
document.onmousedown=drag;
document.onmouseup=new Function("dragapproved=false");
</script>
<div id="dd" class="x" ></div>
自己再稍微改改
能解释下为什么用pixelLeft会有那个现象吗?
你可以跑你原代码,鼠标移到层的最右下角再拖动看看,凌空瞪来着,呵呵
以后在拖动就没有这中现象了
就是因为第一次拖动时,div的位置一下变成 0,0了
不能理解
你用的是offsetLeft
其实写法跟我是差不多的
移动后的鼠标位置 - 刚开始的鼠标位置 +offsetLeft(获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置 )
这个应该是版面吧
我是
移动后的鼠标位置 - 刚开始的鼠标位置 +pixelTop(一个定位元素的上外边距边界与其包含块上边界之间的偏移,不带单位的)
我的理解应该没错吧
只是第一次pixelLeft和pixelTop都是0
所以造成以上现象
但若把样式改成如下:
<div id="dd" style=" position:absolute; background:#0066FF; left:30px; top:80px; height:300px; width:300px;" ></div>
不要指定class,在层内定义 style, 则可以正常跑了。
如果只想得到位置,还是用offsetLeft算了