<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>
自己再稍微改改

解决方案 »

  1.   

    啊  很好呀
    能解释下为什么用pixelLeft会有那个现象吗?
      

  2.   

    不是pixelLeft的现象,是你的算法有问题
    你可以跑你原代码,鼠标移到层的最右下角再拖动看看,凌空瞪来着,呵呵
      

  3.   

    那是打开浏览器第一次拖动的时候吧
    以后在拖动就没有这中现象了
    就是因为第一次拖动时,div的位置一下变成 0,0了
    不能理解
    你用的是offsetLeft
    其实写法跟我是差不多的
    移动后的鼠标位置 - 刚开始的鼠标位置 +offsetLeft(获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置 )
    这个应该是版面吧
    我是
    移动后的鼠标位置 - 刚开始的鼠标位置 +pixelTop(一个定位元素的上外边距边界与其包含块上边界之间的偏移,不带单位的)
    我的理解应该没错吧
      

  4.   

    嗯,没注意看来着,lz理解没错
    只是第一次pixelLeft和pixelTop都是0
    所以造成以上现象
    但若把样式改成如下:
    <div id="dd" style=" position:absolute; background:#0066FF; left:30px; top:80px; height:300px; width:300px;" ></div>
    不要指定class,在层内定义 style, 则可以正常跑了。
    如果只想得到位置,还是用offsetLeft算了