2012-11-05 12 views
5

Próbuję wykonać prosty skrypt przeciągania. Chodzi o to, aby zapisać pozycję, gdy mysz nie działa, zaktualizować widok, gdy mysz się porusza, i zatrzymać, gdy mysz jest w górze. Problem, zdarzenie mouseup nie działa poprawnie.Mouseup nie działa po mousemove on img

Patrz kod:

var target = $('a') 
var pos = 0; 
var dragging = false; 

$(document).mousedown(function(e) { pos=e.pageX; dragging = true }) 
$(document).mouseup(function() { dragging = false }) 
$(document).mousemove(function(e) { 
    if(dragging){ 
     target.css('left', e.pageX-pos); 
    } 
}) ​ 

Dlaczego mouseUp współpracuje z "a" tagu: http://jsfiddle.net/leyou/c3TrG/1/

I dlaczego mouseUp nie działa z "img" tag: http://jsfiddle.net/leyou/eNwzv/

Po prostu spróbuj przeciągnąć je w poziomie.

Ten sam problem na ie9, ff i chrome. Windows7

+0

Działa to samo dla mnie, testowane na chrome i firefox –

Odpowiedz

16

Wystarczy dodać e.preventDefault() do obsługi MouseDown, tak:

var target = $('img') 
var pos = 0; 
var dragging = false; 

$(document).mousedown(function(e) { e.preventDefault(); pos=e.pageX; dragging = true }) 
$(document).mouseup(function() { dragging = false }) 
$(document).mousemove(function(e) { 
    if(dragging){ 
     target.css('left', e.pageX-pos); 
    } 
}) 

Zobacz pracuje demo.

Uzasadnieniem jest to, że przeglądarka również wykonała własny natywny obraz przeciągnij i upuść (np. Przeciągnij obraz i upuść go w aplikacji spoza przeglądarki), więc musisz anulować domyślne przeciąganie i upuszczanie za pomocą .preventDefault().

+1

Rzeczywiście, dziękuję. – leyou

+0

Czy możesz wyjaśnić, dlaczego nie musimy używać 'preventDefault' w zdarzeniu' mousemove'? Problem przeciągania i upuszczania pojawia się podczas przeciągania obrazu. – user31782

Powiązane problemy