2013-02-10 106 views
0

使用以下函數來拖動一個具有句柄的div。拖動div選擇頁面上的文本(某些瀏覽器)

問題是,在一些瀏覽器時,我同時拖動文本選擇,並強調在頁面上..

任何想法如何解決呢?

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

回答

0

對不起,我忘了在以前的帖子第二個問題:

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對象是沒有用的,而是將其分配給documentdocument.body。並且在每個eventhandler函數中也使用pauseEvent()

它看起來是更好地移動document.onselectstartdocument.ondragstartonmousedown處理程序,因爲這些事件已經發射時將轉爲執行onmousemove()

+0

太棒了!現在它是Firefox中唯一的選擇文本,所有其他瀏覽器工作。任何想法如何在FF上解決它?當我移動div的背景文字被選中 – Laine 2013-02-10 19:50:00

+0

不太確定我明白該怎麼辦:) – Laine 2013-02-10 19:57:02

+0

'document.ondragstart = function(){return false; };':)。還要注意,這個(和'document.onselectstart ...')應該移到'mousedown'處理函數中。如果你想在拖動後選擇東西,你需要在'onmouseup()'中刪除這些處理程序。我的FF不會在這些更改後選擇文本...您是否取消了對'pauseEvent()'調用的註釋? – Teemu 2013-02-10 20:01:00

相關問題