我有点想做一台老虎机.要创建老虎机影响我从包装器中删除第一个div并将其添加回底部.当我使用值时,onClick事件工作正常,1000ms但当我使用像100msinterval这样的东西时,我需要快速点击多次以便注册点击事件.为什么会这样?
另外在触摸屏上(在我的手机上查看)我没有遇到这个问题.
setInterval(function() {
swap_box();
}, 100);
function swap_box() {
let first_box = document.getElementsByClassName("box")[0];
first_box.remove();
document.getElementsByClassName("div-wrapper")[0].appendChild(first_box);
first_box.addEventListener("click", function() {
console.log(this.innerText);
});
}Run Code Online (Sandbox Code Playgroud)
.box {
width: 100px;
height: 50px;
border: 1px solid black;
}Run Code Online (Sandbox Code Playgroud)
<div class="div-wrapper">
<div class="box">0</div>
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="box">4</div>
<div class="box">5</div>
<div class="box">6</div>
<div class="box">7</div>
</div>Run Code Online (Sandbox Code Playgroud)
我有三条建议:
setInterval程序,只设置一次单击处理程序.删除元素不会删除其事件处理程序,因此您将获得在循环中附加的重复处理程序.click元素移动太多而不能很好地工作的原因是点击是由鼠标向下和鼠标向上组成的,所以如果元素从这些阶段之间的指针下移出,它可能不起作用.一种解决方案是使用该mousedown事件.let container = document.querySelector('.div-wrapper');
function handleClick(e) {
if (e.target.className === 'box') {
console.log(first_box.innerText);
}
}
container.addEventListener("mousedown", handleClick, false);
setInterval(swap_box, 100);
function swap_box() {
const first_box = document.getElementsByClassName("box")[0];
first_box.remove();
container.appendChild(first_box);
}Run Code Online (Sandbox Code Playgroud)
.box {
width: 100px;
height: 50px;
border: 1px solid black;
}Run Code Online (Sandbox Code Playgroud)
<div class="div-wrapper">
<div class="box">0</div>
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="box">4</div>
<div class="box">5</div>
<div class="box">6</div>
<div class="box">7</div>
</div>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |