Вот альтернативное решение, использующее обратный вызов завершения jQuery.
Вы можете добавить 'selected-pulsate' к элементу в любое время и вызвать setPulsate (), и он начнет пульсировать. Чтобы очистить все токовые пульсаторы, вы можете вызвать clearSelection (), которая просто удаляет класс и заставляет его быть скрытым.
В clearSelection () [clearTimeout ()] есть строка, в которой я не уверен, что это необходимо. В моем чрезвычайно простом тестировании это работает без этой линии, но я не уверен, есть ли вероятность, что таймер все еще может работать в этой точке и вызывать проблемы.
Я также не был уверен, вызовет ли RepeatCall () в полном обратном вызове fadeOut () переполнение стека, поэтому я использовал setTimeout с небольшим значением 10 мсек для повторного вызова функции вместо того, чтобы делать это напрямую.
var currentPulsatorId = -1;
function clearSelection() {
if (currentPulsatorId != -1) {
clearTimeout(currentPulsatorId); /* needed? */
currentPulsatorId = -1;
}
var curElems = $('.selected-pulsate');
$(curElems).removeClass('selected-pulsate');
$(curElems).hide();
}
function setSelection(elems) {
$(elems).addClass('selected-pulsate');
setPulsate();
}
function setPulsate() {
// trigger
RepeatCall();
function RepeatCall()
{
$('.selected-pulsate').fadeIn(400, function() {
$('.selected-pulsate').fadeOut(400, function() {
// set timeout quickly again
// call externally to avoid stack overflow
currentPulsatorId = setTimeout(RepeatCall, 10);
});
});
}
}