这是我当前运行一系列setTimeout函数的代码。当鼠标移动或超过某个元素时,如何停止这些?
$( document ).ready(function() {
clicky()
function clicky() {
setTimeout(function () {jQuery('#1500').trigger('click');}, 3000);
setTimeout(function () {jQuery('#1990').trigger('click');}, 6000);
setTimeout(function () {jQuery('#2010').trigger('click');}, 9000);
setTimeout(function () {jQuery('#battle').trigger('click');}, 12000);
setTimeout(function () {
jQuery('#water').trigger('click');clicky()
}, 15000);
}
});
答案 0 :(得分:2)
您的setTimeout需要定义为变量,以便通过传递给clearTimeout()
来清除它。类似的东西:
var interval = setTimeout(function() {
//msc
}, 8000);
window.clearTimeout(interval);
答案 1 :(得分:2)
您基本上需要保存对超时的引用,以便在需要时可以清除它们。在下面的示例中,我只使用了一个对象,以便您可以根据需要指定要影响的超时时间。
这是一个工作小提琴,可以清除悬停时的超时,然后在鼠标离开时重置它们:http://jsfiddle.net/6tQ4M/2/
代码:
$(function(){
var timeouts = {};
function setTimeouts () {
timeouts['#1500'] = specifyTimeout('#1500', 3000);
timeouts['#1990'] = specifyTimeout('#1990', 6000);
timeouts['#2010'] = specifyTimeout('#2010', 9000);
timeouts['#battle'] = specifyTimeout('#battle', 12000);
timeouts['#water'] = specifyTimeout('#water', 15000, function(){
console.log('reset the timeouts');
clearTimeouts();
setTimeouts();
});
}
function clearTimeouts () {
for(var key in timeouts){
if(timeouts.hasOwnProperty(key)){
clearTimeout(timeouts[key]);
delete timeouts[key];
}
}
}
function specifyTimeout (id, time, callback) {
return setTimeout(function(){
$(id).trigger('click');
if(callback){
callback();
}
}, time);
}
$('a').on('click', function(){
$('#projects').append('clicky clicky!');
});
$('#map').on('mouseover', clearTimeouts);
$('#map').on('mouseleave', setTimeouts);
setTimeouts();
});
如果您对代码有任何疑问,请与我们联系!
答案 2 :(得分:0)
嗯,根据您订购的内容,当您悬停某个区域时,应该触发setTimeOut
,当您离开此区域时,应重置setTimeOut
。
这是代码:
<强> HTML 强>
<div id="map"></div>
<强> CSS 强>
#map{
width:100px;
height:100px;
background-color: black;
}
<强>的Javascript 强>
var timeoutHandle;
$('#map').mouseover(function(event){
window.clearTimeout(timeoutHandle);
});
$('#map').mouseout(function(event){
timeoutHandle = window.setTimeout(function(){ alert("Hello alert!"); }, 2000);
});
基本上你应该保留对setTimeOut
的引用,在这种情况下变量是timeoutHandle
,在鼠标悬停时调用clearTimeOut
并再次调用setTimeOut来重置计时器。
这是jsFiddle:
http://jsfiddle.net/bernardo_pacheco/RBnpp/4/
同一原则可用于多个setTimeOut
计时器。
您可以在此处查看更多技术详情:
希望它有所帮助。