【发布时间】:2015-06-24 13:22:00
【问题描述】:
我知道网上有这样做的例子,但每个例子都不一样,我自己的实现也是如此。我试图弄清楚我的实现出了什么问题,因为它没有按预期工作。
代码sn-p:
var mousePressX = -1;
var mousePressY = -1;
document.getElementById("contextMenu").addEventListener("mousedown", function(event) {
mousePressX = event.clientX;
mousePressY = event.clientY;
}, false);
document.getElementById("contextMenu").addEventListener("mouseup", function(event) {
mousePressX = -1;
mousePressY = -1;
}, false);
document.getElementById("contextMenu").addEventListener("mousemove", function(event) {
if (mousePressX != -1 && mousePressY != -1) {
repositionElement(event.target, event.clientX, event.clientY);
}
}, false);
function repositionElement(element, currentMouseX, currentMouseY) {
element.style.left = element.offsetLeft + (currentMouseX - mousePressX) + 'px';
element.style.top = element.offsetTop + (currentMouseY - mousePressY) + 'px';
}
jsfiddle: http://jsfiddle.net/4rLctko8/
无法真正找出问题所在,但我注意到如果我更改以下几行:
element.style.left = element.offsetLeft + (currentMouseX - mousePressX) + 'px';
element.style.top = element.offsetTop + (currentMouseY - mousePressY) + 'px';
到:
element.style.left = currentMouseX - mousePressX + 'px';
element.style.top = currentMouseY - mousePressY + 'px';
只有当元素被拖动到正 x 轴(向右)和正 y 轴(到底部)时,元素才会被正确拖动,并且当触发 mouseup 时,它将定位在附近的某个地方最左上角区域(0,0左右)
【问题讨论】:
标签: javascript draggable