두 가지 문제가 있습니다. 하나는 마우스가 요소를 떠날 때 드래그를 취소한다는 것이고, 그렇게하지 않으려는 것입니다. 두 번째는 mousemove가 상자 위에있는 것입니다. 일단 커서가 상자 밖으로 나오면 더 이상 mousemove를 실행하지 않습니다. 드래그하는 요소를 저장 한 다음 mousemove를 전체 페이지에 대신 추가 할 수 있습니다.
EDIT : 실제로 빠른 이동 중에 마우스 클릭을 놓고 커서가 상자 밖에있을 경우 실제로 마우스 업이 문서에 있어야한다고 생각합니다. jsfiddle를 업데이트했습니다.
는 여기를 참조하십시오 : 그것은 마우스 후행 함께 할 수있는 뭔가가처럼
http://jsfiddle.net/Jjgmz/1/
var box = $('#box');
box.offset({
left: 100,
top: 75
});
var drag = {
elem: null,
x: 0,
y: 0,
state: false
};
var delta = {
x: 0,
y: 0
};
box.mousedown(function(e) {
if (!drag.state) {
drag.elem = this;
this.style.backgroundColor = '#f00';
drag.x = e.pageX;
drag.y = e.pageY;
drag.state = true;
}
return false;
});
$(document).mousemove(function(e) {
if (drag.state) {
drag.elem.style.backgroundColor = '#f0f';
delta.x = e.pageX - drag.x;
delta.y = e.pageY - drag.y;
$('#log').text(e.pageX + ' ' + e.pageY + ' ' + delta.x + ' ' + delta.y);
var cur_offset = $(drag.elem).offset();
$(drag.elem).offset({
left: (cur_offset.left + delta.x),
top: (cur_offset.top + delta.y)
});
drag.x = e.pageX;
drag.y = e.pageY;
}
});
$(document).mouseup(function() {
if (drag.state) {
drag.elem.style.backgroundColor = '#808';
drag.state = false;
}
});
이 보인다? – daryl
상자 모양을 너무 빨리 드래그하면 마우스 커서가 상자 밖으로 빠져 나와 "고정"상태가됩니다. :) –
예, 마우스가 후행합니다. – daryl