2012-03-09 9 views
7

buduję metodę przeciągnij i upuść, używając zapytania -onmousedown prowadzi do -onmousemove (drag) następnie -onmouseup (usuwa powiązanie onmousemove)przeciągnij i upuść, aby zapobiec podświetlaniu niezgrabnych elementów?

Problem polega na tym, domyślnie przeglądarka rozpocząć podkreślając onmousemove, który pływa po całym strony i anuluje wydarzenie, czyniąc go bezużytecznym. każdy pomysł, jak zapobiec podświetlaniu, bo preventDefault wydaje się nie działać. tu jest mój kodu (tak, jest bardzo zaniedbany, przepraszam!)

$(".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); 


}); 

}); 

Odpowiedz

12

mógł ją wyłączyć podświetlenie za pomocą 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; 

Innym sposobem na to jest, aby usunąć zaznaczenie na razie rozwijanej, a więc:

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(); 
    } 
} 

Więc można by nazwać clearSelection() na razie upadku (po drag jest gotowe)

+0

Nie chcę całkowicie usuwać podświetlania, tylko podczas tego przeciągania. ale mogę rzucić to css poprzez zapytanie jako takie, czy ma to pełną obsługę przeglądarki? – roozbubu

+0

Tak, powinno to dotyczyć większości współczesnych przeglądarek (stąd wszystkie przedrostki dostawców, nawet ms), można zrobić '$ (element) .css ({// css powyżej});' po przeciągnięciu jest inicjowany i ustawić je na ' auto' po zakończeniu upuszczania. –

+0

hmm ... to chyba nie zapobiega podświetlaniu, po prostu pozbywa się go wizualnie. większym problemem był akt podświetlania (gdy użytkownik zaczyna przeciągać nad tekstem, pojawia się podświetlenie lub jeśli na początku przeciąga nad nim, anuluje przeciągnięcie i zaczyna podświetlać) i rujnuje przeciąganie i upuszczanie. – roozbubu

2

dodać 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*/ 
Powiązane problemy