シンプルなドラッグ アンド ドロップ インターフェイスをセットアップしようとしていますが、要素のオフセット値が一致していないために問題が発生しています。要素のオフセットは、mousemove
イベント内で導出されます。値は正しいものと正しくないものを交互に繰り返します。私は困惑しています!
要素/divがバタバタしているように見えます笑私は、 &がすべての正しい値と間違った値を交互に繰り返す
理由が本当にわかりません。どんなアイデアや提案も大歓迎です!div.offsetLeft
div.offsetTop
mousemove
ここでjsfiddle
ps、そのコーナーの 1 つの div をクリックし、それを移動して、私が意味することを最大限に確認してください
* {
margin: 0;
padding: 0;
outline: none;
}
#pageWrap {
position: relative;
width: 1024px;
margin: 0 auto;
}
#div {
position: absolute;
top: 0;
left: 0;
background: #000;
overflow: hidden;
}
<div id="pageWrap">
<div id="div" style="width:200px; height:200px;"></div>
</div>
var div = document.getElementById('div'),
divWidth = div.clientWidth,
divHeight = div.clientHeight,
divStyle = div.style,
pageWrap = document.getElementById('pageWrap');
function divMove(e) {
var mouseLeft = e.clientX - pageWrap.offsetLeft,
mouseTop = e.clientY - pageWrap.offsetTop,
divLeft = mouseLeft - (div.offsetLeft + divWidth - mouseLeft),
divTop = mouseTop - (div.offsetTop + divHeight - mouseTop);
divStyle.left = divLeft + 'px';
divStyle.top = divTop + 'px';
}
function divDown(e) {
if(e.preventDefault) {
e.preventDefault();
} else {
e.returnValue = false;
}
if (e.target === div) {
document.addEventListener('mousemove', divMove, false);
}
}
function cleanUp() {
document.removeEventListener('mousemove', divMove, false);
}
document.addEventListener('mousedown', divDown, false);
document.addEventListener('mouseup', cleanUp, false);