2014-01-31 3 views
0

Вот ситуация:Можно ли определить интервалы интервала в массиве?

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 - одушевляет
  • MouseLeave - после того, как 600мс возвращается к предыдущему состоянию до анимации.

Я пытаюсь сделать одно, что если я уеду мышь и она входит в DIV в этом 600мс интервала DIV не вернется в прежнее состояние :)

Как Есть несколько DIV-х Я пытаюсь обрабатывать интервалы setTimeout с массивом, но не успешно ...

Можно ли определить эти интервалы в массиве? Или я должен использовать другой метод для этой задачи.

P.S. Проблема в этом случае состоит в том, что только последний элемент реагирует на событие mouseleave, если я перехожу из div в div, предыдущие divs не возвращаются к нормальному состоянию.

+0

Вы пробовали '$ (...). Остановить (истина)' функцию? –

+0

Ваш метод должен работать (после исправления любых ошибок, которые могут быть там). Однако может быть немного чище хранить эти таймеры в самих элементах, используя '.data()'. Кроме того, более эффективное обозначение ваших переменных сделает ваш код более понятным. Вы всегда можете их минимизировать для производства. – techfoobar

+0

Получил, элементы, где не под одним и тем же родителем, поэтому у всех был индекс = 0 ... Глупо мне. Спасибо, парни. – Tautvydas

ответ

0

Переменная 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); 
}); 
+0

Я отредактировал код, чтобы быть более читаемым, поэтому BHT или FireFlipTimer запускает анимацию на элементе, если введенная мышь и не оставила div на 250 мс. Если он входит в следующий div до 250 мс, он не выполняет анимацию для последнего элемента и запускает новый таймер для следующего элемента. – Tautvydas

+0

Да, так, мое решение работает? –

+0

Noup, даже с вашей, проблема в том, что если я введу один элемент, тогда я оставлю его и введите другое - последнее не вернулось в предыдущее состояние. Они все делают анимацию Fire, так что это не так. – Tautvydas

Смежные вопросы