2012-11-05 14 views
5

私は単純なドラッグスクリプトを実行しようとしています。 アイデアは、マウスがダウンしているときの位置を保存し、マウスが動いている間はビューを更新し、マウスがアップしているときは停止することです。問題、mouseupイベントが正しく機能していません。 imgのmousemoveの後にマウスアップが動作しない

はコードを参照してください:

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

なぜ "" タグと連携のmouseup: http://jsfiddle.net/leyou/eNwzv/

http://jsfiddle.net/leyou/c3TrG/1/

とのmouseupは "IMG" タグでは動作しない理由

横にドラッグしてみてください。

ie9、ff、およびchromeに同じ問題があります。 Windows7の

+0

私のために同じことをして、クロムとfirefoxでテストしました –

答えて

16

はちょうどこのように、あなたのマウスダウンハンドラにe.preventDefault()を追加します。

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

demoの作業を参照してください。

ブラウザは、独自のネイティブイメージのドラッグアンドドロップ(イメージをドラッグしてブラウザ外のアプリケーションにドロップするなど)を行っていたため、デフォルトのドラッグアンドドロップをキャンセルする必要があります。.preventDefault()

+1

本当にありがとうございます。 – leyou

+0

なぜ 'mousemove'イベントで' preventDefault'を使わなければならないのか説明できますか?イメージがドラッグされている間、ドラッグドロップの問題が表示されます。 – user31782

関連する問題