繁体   English   中英

拖动div选择页面上的文本(某些浏览器)

[英]Dragging div selects text on page (some browsers)

我使用以下功能拖动带有手柄的div。

问题是在某些浏览器中,当我同时拖动文本时,在页面上选择并突出显示了文本。

任何想法如何解决?

function enableDragging (ele) {
    var dragging = dragging || false,
        x, y, Ox, Oy,
        current;
        enableDragging.z = enableDragging.z || 1;
    var grabber = document.getElementById("myHandle");
    grabber.onmousedown = function (ev) {
        ev = ev || window.event;
        var target = ev.target || ev.srcElement;
        current = target.parentElement;
        dragging = true;
        x = ev.clientX;
        y = ev.clientY;
        Ox = current.offsetLeft;
        Oy = current.offsetTop;
        current.style.zIndex = ++enableDragging.z;
        console.log(dragging);

        document.onmousemove = function(ev) {

            ev = ev || window.event;

            //pauseEvent(ev);         
            if (dragging == true) {
                var Sx = ev.clientX - x + Ox,
                    Sy = ev.clientY - y + Oy;
                current.style.top = Sy + "px";
                current.style.left = Sx + "px";
                document.body.focus();
                // prevent text selection in IE
                document.onselectstart = function () { return false; };
                // prevent IE from trying to drag an image
                ev.ondragstart = function() { return false; };                  
                return false;   
            }
        }
        document.onmouseup = function(ev) {
            //alert("stop");
            dragging && (dragging = false);
        }
    };
}    

function pauseEvent(e){
    if(e.stopPropagation) e.stopPropagation();
    if(e.preventDefault) e.preventDefault();
    e.cancelBubble=true;
    e.returnValue=false;
    return false;
}

拖动开始于:

    var ele = document.getElementById("divWrapper");
    enableDragging(ele);

抱歉,我忘记了您先前帖子中的第二个问题。 但是,您还需要防止默认值onmouseup

document.onmouseup = function(ev) {
    ev = ev || window.event;
    dragging && (dragging = false);
    if (ev.preventDefault) {
        ev.preventDefault();
    } else {
        ev.cancelBubble=true;
        ev.returnValue=false;
    }
    return false;
}

编辑

或者只是使用您的pauseEvent()函数。 注意,您的代码中包含以下内容: ev.ondragstart = function () {...}; 没有将事件处理程序分配给Event对象,而是将其分配给documentdocument.body 并且还要在每个事件处理函数中使用该pauseEvent()

似乎最好将document.onselectstartdocument.ondragstart移至onmousedown处理程序,因为当执行移至onmousemove()时,这些事件已经触发。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM