2011-07-27 8 views
0
<html> 
<head> 
<title> test </title> 
<script> 
var dragObject = null ; 
var mouseStartCoords = null ; 
var mouseTargetCoords = null ; 
var initPosition = null ; 

function makeDraggable(item) { 
    if(!item){ 
     return false ; 
    } 
    item.onmousedown = function(ev) { 
     dragObject = this ; 
     initPosition = getPosition(item) ; 
     if (!initPosition) return false ; 
     mouseStartCoords = getMouseCoords(ev) ; 
    } 
} 

function getPosition(e){ 
    if(!e){ 
     return false ; 
    } 
    return { 
     x:e.offsetLeft, y:e.offsetTop 
    }; 
} 

function getMouseCoords(ev) { 
    ev = ev || window.event ; 
    return { 
     x:ev.clientX, y:ev.clientY 
    }; 
} 

function mouseMove(ev) { 
    ev = ev || window.event ; 
    var target = ev.target || ev.srcElement ; 
    mouseTargetCoords = getMouseCoords(ev) ; 
    if (dragObject){ 
     target.style.position = 'absolute' ; 
     target.style.top = initPosition.y + mouseTargetCoords.y - mouseStartCoords.y ; 
     target.style.left = initPosition.x + mouseTargetCoords.x - mouseStartCoords.x ;  
    } 
} 


function mouseUp(ev) { 
    dragObject = false ; 
} 


document.onmouseup = mouseUp ; 
document.onmousemove = mouseMove ; 

window.onload = function() { 
    makeDraggable(document.getElementById('dragObj')) ; 
} 
</script> 
</head> 
<body> 
<img src="1.jpg" id="dragObj" /> 
</body> 
</html> 
+0

問題点は何ですか?何が起こり、何が起こりたいですか?詳細情報とhttp://jsfiddle.net/のデモをご提供ください。 –

答えて

1

エラーは、それが動作します。この変更後ev = ev || window.event ;

に変更しev = ev || windown.event ;。しかし、ないスムーズに、マウスが画像上にないときに意味の理由

function mouseMove(ev) { 
    ev = ev || window.event ; 
    var target = ev.target || ev.srcElement ; 
    mouseTargetCoords = getMouseCoords(ev) ; 
    if (dragObject){ 
     target.style.position = 'absolute' ; 
     target.style.top = initPosition.y + mouseTargetCoords.y - mouseStartCoords.y ; 
     target.style.left = initPosition.x + mouseTargetCoords.x - mouseStartCoords.x ;  
    } 
} 

document.onmousemove = mouseMove ; 

はその後event.srcElementは、その位置uが取得しようとしてrをドキュメントになり(uはスクリプトが実行できるよりも速いドラッグしたときに起こります)。

EDIT

次の変更を実行するために必要な適切

function makeDraggable(item) { 
    if(!item){ 
     return false ; 
    } 
    item.onmousedown = function(ev) { 
     dragObject = item ; 
     initPosition = getPosition(item) ; 
     if (!initPosition) return false ; 
     mouseStartCoords = getMouseCoords(ev) ; 
    } 
} 

function mouseMove(ev) { 
    ev = ev || window.event ; 
    var target = ev.target || ev.srcElement ; 
    mouseTargetCoords = getMouseCoords(ev) ; 
    if (dragObject){ 
     dragObject.style.position = 'absolute' ; 
     dragObject.style.top = initPosition.y + mouseTargetCoords.y - mouseStartCoords.y ; 
     dragObject.style.left = initPosition.x + mouseTargetCoords.x - mouseStartCoords.x ;  
    } 
} 

function mouseUp(ev) { 
    dragObject = null ; 
} 
+0

ありがとう、まだそれはまだではない – absurdism

+0

ええ、ありがとう、 'スムーズではない'部分。 – absurdism

1

私の推測では、あなたはおそらく、それはドラッグブラウザのネイティブイメージをしようとしないように、ブラウザのデフォルトのアクションを阻止したいということです。

onmousedownハンドラの内部では、あなたはおそらくこのような何かしたい:彼らは、リンクに関連するよう

ev = ev || window.event ; 
    if (ev.preventDefault) { 
     ev.preventDefault() ; 
    } 
    ev.returnValue = false ; 
    dragObject = this ; 
    initPosition = getPosition(item) ; 
    if (!initPosition) return false ; 
    mouseStartCoords = getMouseCoords(ev) ; 

人々は、デフォルトの動作に最も精通しています。アンカータグの場合、リンクがクリックされたときのブラウザのデフォルト動作は、hrefにナビゲートすることです。これを止めるには、preventDefault()(またはIEの同等のもの、returnValuefalse)を使用します。

ブラウザには、イメージをドラッグするなど、他のアクティビティのデフォルトアクションもあります。画像をドラッグする場合、一部のブラウザで半透明のゴースト画像が作成され、ドラッグすることができます。

+0

ありがとう、私はそれを試してみます – absurdism

+0

あなたはこれを把握しましたか? – jimbojw