2012-03-09 182 views
7

我建立一個拖放方法,使用查詢 -onmousedown 導致-onmousemove(阻力),然後-onmouseup(沒有綁定的OnMouseMove)拖放,防止尷尬突出顯示?

的問題是,瀏覽器默認開始突顯的OnMouseMove,其遍佈蒼蠅該頁面並取消該事件,使其無法使用。任何想法如何防止突出顯示,因爲preventDefault似乎沒有工作。這裏是我的代碼(是它非常馬虎,對不起!)

$(".middleRow").mousedown(function(){ 
calculateSelection(); 

    $('body').append('<div class="messageDrag" style="display:block">'+numSelected+'<div  style="font-size: 18px">messages</div></div>'); 


$(document).mouseup(function(){ 

     $('.messageDrag').fadeOut(500); 

     setTimeout(function(){ 
     $('.messageDrag').remove(); 
     }, 500); 


     $(document).unbind(); 


    }) 


$(document).mousemove(function(e){ 


    e.preventDefault(); 


    var x = e.pageX; 
    var y = e.pageY; 
    $(".messageDrag").css("left", x-49); 
    $(".messageDrag").css("top", y-49); 


}); 

}); 

回答

12

您可以禁用使用CSS

-webkit-touch-callout: none; 
-webkit-user-select: none; 
-khtml-user-select: none; 
-moz-user-select: none; 
-ms-user-select: none; 
-o-user-select: none; 
user-select: none; 

這樣做的另一種方式是清除drop事件的選擇,因爲這樣強調:

function clearSelection() { 
    var sel; 
    if(document.selection && document.selection.empty){ 
     document.selection.empty() ; 
    } else if(window.getSelection) { 
     sel = window.getSelection(); 
     if(sel && sel.removeAllRanges) 
     sel.collapse(); 
    } 
} 

所以,你會調用clearSelection()上放置事件(拖動結束後)

+0

我不想完全刪除突出顯示,只在這個拖動狀態。但我可以通過查詢來拋出這個CSS,這是否具有完整的瀏覽器支持? – roozbubu 2012-03-09 01:53:58

+0

是的,它應該覆蓋大多數現代瀏覽器(因此所有的供應商前綴,甚至毫秒),你可以做'$(element).css({//上面的css});'當拖動被初始化時,並將它們設置爲'自動'一旦下降完成。 – 2012-03-09 01:56:12

+0

嗯..這似乎並沒有阻止突出顯示,只是在視覺上擺脫它。更大的問題是突出顯示的行爲(當用戶開始拖動文本,突出顯示,或者如果在開始時他拖過它,則取消拖動並開始突出顯示),並且它正在破壞拖放。 – roozbubu 2012-03-09 02:04:54

2

add css

-webkit-touch-callout: none;/*for mobile*/ 
-webkit-user-select: none;/*for chrome*/ 
-khtml-user-select: none;/*for safari*/ 
-moz-user-select: none;/*for Mozilla*/ 
-ms-user-select: none;/*for mircosoft*/ 
-o-user-select: none;/*for opera*/ 
user-select: none;/*base css ,but not work in all browsers*/