为什么setTimeout不能像预期的那样工作?
Why doesn't setTimeout work as expected?
我试图移动<div id="box">
每次我的鼠标指针悬停在它上面,但它似乎只有当我在div上有mouseover
事件而不是当我的鼠标悬停在它上面时才会移动。
document.getElementsByTagName("body")[0].addEventListener("load",init());
function init(){
console.log('in init');
document.getElementById("box").addEventListener("mouseover",function(){
var pixels=5;
var perMs=40;
var repeater=setTimeout(moveBox(pixels),perMs);
document.getElementById("box").addEventListener("mouseout",function(){
console.log('mouseOut');
clearTimeout(repeater);
});
});
}
function moveBox(pixels){
console.log('moveBox');
var leftBox=document.getElementById("box").style.left;
leftBox=parseInt(leftBox)+pixels;
document.getElementById("box").style.left=leftBox;
}
看起来好像你打算使用setInterval
来代替,在重复的基础上调整元素:
var repeaterId = setInterval(moveBox, perMs, pixels);
setTimeout接收回调函数作为第一个参数,问题是moveBox(pixels)执行函数并返回它的结果,所以你应该把它包装到另一个函数。
你也会想要取消订阅'mouseout'事件每次你订阅它在你的mouseover回调:
function init(){
console.log('in init');
document.getElementById("box").addEventListener("mouseover",function(){
var pixels=5;
var perMs=40;
var repeater=setTimeout(function(){moveBox(pixels)},perMs);
document.getElementById("box").addEventListener("mouseout",function onMouseOut(){
console.log('mouseOut');
clearTimeout(repeater);
document.getElementById("box").removeEventListener("mouseout",onMouseOut);
});
});
}
您的代码中有许多语法问题,这里是主要问题的更正。
function init() {
console.log('in init');
var box = document.getElementById("box"),
pixels = 5,
perMs = 40,
repeater;
function moveBox(pixels) {
console.log('moveBox', pixels);
var boxLeft = parseInt(box.style.left, 10) || 0;
box.style.left = (boxLeft + pixels) + 'px';
}
box.addEventListener("mouseover", function() {
repeater = setTimeout(moveBox, perMs, pixels);
});
box.addEventListener("mouseout", function(){
console.log('mouseOut');
clearTimeout(repeater);
});
}
document.getElementsByTagName("body")[0].addEventListener("load",init);
请注意setTimeout
只被调用一次,它不会重复。
此处演示:https://jsfiddle.net/vqgesj58/1/
如果你想让你的方框在鼠标停留时移动,我将更新代码
相关文章:
- 刷新后,setTimeout将工作或不工作
- 使setInterval和setTimeout工作时出现问题
- 为什么我需要在setTimeout中有匿名函数才能使此代码工作
- window.open没有't在设置setTimeout内工作-弹出窗口被阻止
- 如何使setTimeout脚本在html表单中正常工作
- SetTimeout延迟未按jquery幻灯片中的预期工作
- setTimeout()在JavaScript中是如何工作的
- Javascript-为什么不是't此setTimeout函数正在工作
- setInterval工作setTimeout不工作;t
- setTimeout未按要求工作
- 为什么javascript setTimeout()不能在循环中工作
- setTimeout方法的工作原理很奇怪
- 变量在Javascript中是如何工作的?可以在setTimeout期间更改变量值
- Javascript:addEventListener 仅在 setTimeout 中工作
- 如何删除 settimeOut 的队列工作
- 在工作线程中使用 setTimeOut
- 无法在 javascript 中获取 setTimeout 以正常工作
- 在循环中调用 setTimeout 未按预期工作
- setTimeout() 如何在 JS 上工作
- JavaScript代码首先使用setTimeout工作,但随后崩溃或不起作用