javascript - 点击后动态创建的跨度和交换跨度
问题描述
我在这里有一个动态创建的跨度数组:
button.onclick = (e) => {
e.preventDefault();
str = inputIn.value;
inputIn.value = '';
}
for (let i = 0; i < str.length; i++) {
const span = document.createElement('span');
span.textContent = str[i];
document.body.appendChild(span);
//--- save old position
let rect = span.getBoundingClientRect();
span.setAttribute('oldleft', `${rect.left}px`);
span.setAttribute('oldtop', `${rect.top}px`);
// call moving/swapping func
onClickAndMove(span);`
之后,每个元素都有两个有价值的位置作为当前位置,由 (left,top) 表示并从最后一个 body.click 属性保存为 (oldleft, olttop)。来自控制台的直接代码在这里:
<span id="0" oldleft="624.71875px" oldtop="166.5px" style="margin: 2px; border: 1px solid rgb(0, 0, 0);">Q</span>
<span id="1" oldleft="631.71875px" oldtop="166.5px" style="margin: 2px; border: 1px solid rgb(0, 0, 0);">W</span>
第一次单击第一个元素在鼠标指针之后开始移动,第二次单击它在正文中获得鼠标指针 onclick 位置。我对第二个元素做同样的事情。之后,所有内容都必须按如下方式工作:在重叠元素(一个被连接到鼠标指针和)上单击事件时,它们必须交换,因为规则首先不被连接元素出现在第二个的(oldleft / oldtop)位置被连接的时刻元素和第二个元素必须在点击时占据鼠标指针位置。实际发生的情况如下:在将 0 元素与 1 元素交换时,一切正常,它们必须交换。在将 1-element 与 0-element 交换时,1-element (oldleft/oldtop) 的属性与 1-element 的实际位置不匹配。更新旧元素位置的功能在这里:
function saveOldLeftTop(char) {
let rect = char.getBoundingClientRect();
char.setAttribute('oldleft', `${rect.left}px`);
char.setAttribute('oldtop', `${rect.top}px`);
}
解决方案
推荐阅读
- c# - 在多个类中使用相同的变量
- msbuild - 使用中间构建项目时,tfs build 不会复制到放置位置
- c - 在 Windows 的串行编程中使用 PThread
- snowflake-cloud-data-platform - 雪花:在 TRUNCATE 加载旧数据后复制到?
- windows - 在 Windows 上安装 Pytorch
- python - Python:未定义变量:'snakemake',忽略警告,或者理想情况下自动完成
- python - 我不明白为什么我的 python 脚本不能工作 Traceback 和 UnboundLocalError
- c - 三元或 if 语句更快吗?
- octave - Octave:对行求和后将表拆分为子表
- javascript - 打字稿中的forEach函数