代码1
<script language="javascript" type="text/javascript">
    var selObj = null  //是否选中控件
    , selX
    , selY;
    function movedown(obj) {
        selObj = obj;
        obj.style.background = 'Wheat';
        selX = event.clientX - obj.style.left.replace("px", "");
        selY = event.clientY - obj.style.top.replace("px", ""); 
    }
    function moveup(obj) {
        selObj = null;
        obj.style.background = 'Gray';
    }
    function move(obj) {
        if (selObj == null) return;
        obj.style.left = event.clientX - selX; //当鼠标拖动时,控件移动,鼠标拖动值应减掉间隙值
        obj.style.top = event.clientY - selY; 
    }
  
</script>
代码2
<script type="text/javascript">
    var dragapproved = false
    var z, x, y
    function move() {
        if (event.button == 1 && dragapproved) {
           z.style.pixelLeft = temp1 + event.clientX - x;
           z.style.pixelTop = temp2 + event.clientY - y;
            return false;
        } 
    }
    function drags() {
        if (!document.all)
            return;
        if (event.srcElement.className == "drag") {
            dragapproved = true;
            z = event.srcElement;
            temp1 = z.style.pixelLeft;
            temp2 = z.style.pixelTop;
            x = event.clientX;
            y = event.clientY;
            document.onmousemove = move;   
        } 
    }
    document.onmousedown = drags;
    document.onmouseup = new Function("dragapproved=false");
</script>
说明(代码1和代码2都是实现控件拖动功能的,其中代码1对应的控件需要使用绝对定位,代码2对应的控件需要使用相对定位)
问题:
1.在鼠标拖动较慢时,代码1对lable和没有设置src属性的图片是没有问题的,但是对图片设置src属性后,图片就只移动一点,然后就动不了了,当松开鼠标后,图片会向图片拖动方向再移一点,鼠标拖动较快时,鼠标会移出控件,控件跟不上鼠标的速度
2.代码2无论鼠标移动多快,控件都不会脱离鼠标,非常正确可靠。
3.代码2把move里的return false 去掉是不正常的(不知道为什么)
求解释!求解释!求解释!求解释!求解释!求解释!求解释!求解释!求解释!求解释!求解释!问题补充: 

解决方案 »

  1.   

    开始写类似的代码确定头痛。<style type="text/css">
        #tt{
            position: absolute;
            border: 1px solid red;
            width:200px;height:200px;
            background-color: #ddd;
        }
    </style>
    <div id="tt"></div>
    <script type="text/javascript">
        function move(e){
            var oe=e||window.event;
            var $this = this;
            var startX = oe.clientX - $this.offsetLeft;
            var startY = oe.clientY - $this.offsetTop;
            document.onmousemove = function (e) {
                var oe = e || window.event;
                $this.style.left = oe.clientX - startX + "px";
                $this.style.top = oe.clientY - startY + "px";
            };
            document.onmouseup = function () {
                document.onmousemove = null;
                document.onmouseup = null;
                if ($this.releaseCapture) {
                    $this.releaseCapture();
                }
            };
            if ($this.setCapture) {
                $this.setCapture();
            }
        }
        document.getElementById("tt").onmousedown=move;
    </script>