【发布时间】:2020-02-29 19:47:24
【问题描述】:
我有一些代码用于拖动使用 vanilla javascript 的元素,它工作正常,但我正在摸索如何将其限制为 t、l、r、b 或至少顶部和左侧。请不要使用 jquery。
function dragElement(elmnt) {
var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
elmnt.onmousedown = dragMouseDown;
function dragMouseDown(e) {
e = e || window.event;
e.preventDefault();
// get the mouse cursor position at startup:
pos3 = e.clientX;
pos4 = e.clientY;
document.onmouseup = closeDragElement;
// call a function whenever the cursor moves:
document.onmousemove = elementDrag;
}
function elementDrag(e) {
e = e || window.event;
e.preventDefault();
// calculate the new cursor position:
pos1 = pos3 - e.clientX;
pos2 = pos4 - e.clientY;
pos3 = e.clientX;
pos4 = e.clientY;
// if (value = reached / exceeded){ stop dragging any
//further please}
elmnt.style.top = (topPos - pos2) + "px";
elmnt.style.left = (leftPos - pos1) + "px";
}
}
我可以计算出元素相对于其父元素的顶部(和左侧)位置,但似乎无法告诉它停止拖动。我在代码中添加了一个注释示例,我认为它会是逻辑上的。但到目前为止,这意味着拖动完全停止,而不是我所追求的“约束”。任何帮助表示赞赏!
【问题讨论】:
-
TIP:计算父子边界,确保子节点不超过(大于等于T/L,小于等于B/R)
-
计算最大顶部/左侧/底部/右侧并适当使用 Math.min 或 max 以确保您不会超出这些限制。
-
@bryan60 如帖子中所述,我有这些计算,但我不知道如何限制它,你能按照你的建议给我一个最小值或最大值的例子吗?
-
@AngelPolitis 我已经计算了这些界限——我不确定的是你评论中的“确保”部分。
标签: javascript draggable