[英]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对象,而是将其分配给document
或document.body
。 并且还要在每个事件处理函数中使用该pauseEvent()
。
似乎最好将document.onselectstart
和document.ondragstart
移至onmousedown
处理程序,因为当执行移至onmousemove()
时,这些事件已经触发。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.