Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以在数组中定义设置超时间隔?_Javascript_Jquery_Arrays_Settimeout - Fatal编程技术网

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毫秒后返回到动画之前的状态
我想做的是,如果我离开鼠标,它以600毫秒的间隔进入div,div就不会回到以前的状态:)

由于有多个div,我正在尝试使用数组处理setTimeout Interval,但没有成功

可以在数组中定义这些间隔吗?或者我应该为这个任务使用不同的方法


另外,本例中的问题是,只有最后一个元素对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,即使是你的,问题是如果我输入一个元素,然后离开它并输入另一个元素-最后一个元素没有返回到以前的状态。他们都做火焰动画,所以不是这样哦,对不起,问题是元素的位置,所有这些元素不在同一个父元素下,所以这甚至是我的解决方案。无论如何,谢谢你抽出时间来帮助威廉。