制作拖拽效果在chorome下使用window.captureEvents,但是发现不起作用,该怎么破?

最近在跟进以前同事做的一个项目时发现一个问题,当鼠标移动到事件监听区域以外后,事件监听就不起作用了。遂想到用window.captureEvents.但是那样加的话对chorome任然不起作用,打断点以后发现这段代码被执行了,但是当鼠标移动到监听区域以外后div还是不动,请教是不是哪里写的不对?

oDiv.onmousedown = function(ev){
        ...
        if(oDiv.setCapture){
            oDiv.setCapture();
        }else if(window.captureEvents){    //chorome不起作用
            window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
        }
        oDiv.onmousemove = mousemove;
        oDiv.onmouseup = mouseup;
    }
    function mousemove(ev)
    {
        var oEvent = ev || event;
        var t = oEvent.clientY-disY;
        oDiv.style.top = t +'px';
        oDiv_top2=oEvent.clientY;
    }
    function mouseup()
    {
        this.onmousemove = null;
        this.onmouseup = null;
        if(oDiv.releaseCapture){
            oDiv.releaseCapture();
        }else if(window.releaseEvents){
            window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP);
        }
    ...
    }
阅读 5.6k
2 个回答

把 mousemove 跟 mouseup 绑定到 document。

新手上路,请多包涵

刚好在处理类似问题,楼上说的没错oDiv.onmousemove = mousemove;换成document.onmousemove = mousemove;
但是在google浏览器或者webkit内核的浏览器中都会说window.captureEvents()过时,将不会起任何作用,但是鼠标离开监听区域还是没问题的,即使出了浏览器

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题