Javascript 是否可以在数组中定义设置超时间隔?
情况如下:Javascript 是否可以在数组中定义设置超时间隔?,javascript,jquery,arrays,settimeout,Javascript,Jquery,Arrays,Settimeout,情况如下: var FireFlipTimer = ''; var UnFlipTimer = []; $('.CategoryBox').on('mouseenter', '.Box', function() { clearTimeout(FireFlipTimer); var $t = $(this); var i = $t.index(); clearTimeout(UnFlipTimer[i]); BHT = setTimeout(function
var FireFlipTimer = '';
var UnFlipTimer = [];
$('.CategoryBox').on('mouseenter', '.Box', function() {
clearTimeout(FireFlipTimer);
var $t = $(this);
var i = $t.index();
clearTimeout(UnFlipTimer[i]);
BHT = setTimeout(function() { FlipCat($t); }, 250);
}).on('mouseleave', '.Box', function() {
clearTimeout(FireFlipTimer);
var $t = $(this);
var i = $t.index();
UnFlipTimer[i] = setTimeout(function() { UnFlipCat($t); }, 600);
});
基本上有一个div,它位于:
- mouseenter-动画
- 鼠标移动-600毫秒后返回到动画之前的状态
另外,本例中的问题是,只有最后一个元素对mouseleave事件作出反应,如果我从一个div转到另一个div,则以前的div不会返回到正常状态。这是因为
BHT
变量只包含一个计时器(即,它不是计时器数组)。因此,如果将鼠标悬停在多个元素上,第一个元素(存储在BHT变量中)的计时器将被下一个计时器覆盖
您需要做的是将BHT
变量设置为数组,并像BHT2
变量一样使用它
所以看起来像是
var FireFlipTimer = [];
var UnFlipTimer = [];
$('.CategoryBox').on('mouseenter', '.Box', function() {
var $t = $(this);
var i = $t.index();
clearTimeout(FireFlipTimer[i]);
clearTimeout(UnFlipTimer[i]);
FireFlipTimer[i] = setTimeout(function() { FlipCat($t); }, 250);
}).on('mouseleave', '.Box', function() {
var $t = $(this);
var i = $t.index();
clearTimeout(FireFlipTimer[i]);
UnFlipTimer[i] = setTimeout(function() { UnFlipCat($t); }, 600);
});
您是否尝试过
$(…).stop(true)
函数?您的方法应该可以工作(在更正可能存在的任何错误后)。但是,使用.data()
将这些计时器存储在相应的元素中可能会更干净一些。此外,更好地命名变量将使代码更具可读性。你可以随时缩小它们以用于生产。明白了,元素不在同一个父元素下,所以所有元素的索引都为0。。。愚蠢的我。谢谢大家。我编辑了代码以使其更具可读性,所以如果鼠标进入并在250毫秒内未离开div,BHT或FireFlipTimer将在元素上触发动画。如果它在250毫秒之前进入下一个div,它不会为最后一个元素触发动画,并为下一个元素启动新的计时器。Noup,即使是你的,问题是如果我输入一个元素,然后离开它并输入另一个元素-最后一个元素没有返回到以前的状态。他们都做火焰动画,所以不是这样哦,对不起,问题是元素的位置,所有这些元素不在同一个父元素下,所以这甚至是我的解决方案。无论如何,谢谢你抽出时间来帮助威廉。