0
使用以下函數來拖動一個具有句柄的div。拖動div選擇頁面上的文本(某些瀏覽器)
問題是,在一些瀏覽器時,我同時拖動文本選擇,並強調在頁面上..
任何想法如何解決呢?
var ele = document.getElementById("divWrapper");
enableDragging(ele);
使用以下函數來拖動一個具有句柄的div。拖動div選擇頁面上的文本(某些瀏覽器)
問題是,在一些瀏覽器時,我同時拖動文本選擇,並強調在頁面上..
任何想法如何解決呢?
var ele = document.getElementById("divWrapper");
enableDragging(ele);
對不起,我忘了在以前的帖子第二個問題:
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;
}
將被啓動。但是,你需要防止默認從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
。並且在每個eventhandler函數中也使用pauseEvent()
。
它看起來是更好地移動document.onselectstart
和document.ondragstart
到onmousedown
處理程序,因爲這些事件已經發射時將轉爲執行onmousemove()
。
太棒了!現在它是Firefox中唯一的選擇文本,所有其他瀏覽器工作。任何想法如何在FF上解決它?當我移動div的背景文字被選中 – Laine 2013-02-10 19:50:00
不太確定我明白該怎麼辦:) – Laine 2013-02-10 19:57:02
'document.ondragstart = function(){return false; };':)。還要注意,這個(和'document.onselectstart ...')應該移到'mousedown'處理函數中。如果你想在拖動後選擇東西,你需要在'onmouseup()'中刪除這些處理程序。我的FF不會在這些更改後選擇文本...您是否取消了對'pauseEvent()'調用的註釋? – Teemu 2013-02-10 20:01:00