gpt4 book ai didi

javascript - 如何制作多个可移动元素

转载 作者:行者123 更新时间:2023-11-28 03:03:51 24 4
gpt4 key购买 nike

我有用于创建可移动窗口(元素)的代码,并且在创建新窗口时调用此函数:

function dragWindow(elmnt) {
var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
elmnt.querySelector(".window-caption").onmousedown = dragMouseDown;
function dragMouseDown(e) {
e.preventDefault();
pos3 = e.clientX;
pos4 = e.clientY;
document.onmouseup = closeDragElement;
document.onmousemove = elementDrag;
}
function elementDrag(e) {
e.preventDefault();
pos1 = pos3 - e.clientX;
pos2 = pos4 - e.clientY;
pos3 = e.clientX;
pos4 = e.clientY;
elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
}
function closeDragElement() {
// alert(elmnt.id);
document.onmouseup = null;
document.onmousemove = null;
}
}

问题是:

if I create a new window, I can't move windows they created before.

最佳答案

当您向上移动鼠标时,函数 closeDragElement() 被调用,事件监听器 document.onmousemove 被覆盖为“null”。

注释掉函数closeDragElement()中的最后一行可能会解决这个问题:

function closeDragElement() {
// alert(elmnt.id);
document.onmouseup = null;
// document.onmousemove = null;
}

编辑:添加了一个变量mousedown来指示鼠标是否按下。

function dragWindow(elmnt) {
var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
var mousedown = 0;
elmnt.querySelector(".window-caption").onmousedown = dragMouseDown;
function dragMouseDown(e) {
e.preventDefault();
mousedown++;
pos3 = e.clientX;
pos4 = e.clientY;
document.onmouseup = closeDragElement;
document.onmousemove = elementDrag;
}
function elementDrag(e) {
e.preventDefault();
if (mousedown === 0) {return;}
pos1 = pos3 - e.clientX;
pos2 = pos4 - e.clientY;
pos3 = e.clientX;
pos4 = e.clientY;
elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
}
function closeDragElement() {
// alert(elmnt.id);
mousedown--;
document.onmouseup = null;
//document.onmousemove = null;
}
}

引用:https://stackoverflow.com/a/322827/8031896

关于javascript - 如何制作多个可移动元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60779698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com