Я пытаюсь добавить и удалить класс из нескольких элементов с некоторыми задержками, чтобы создать «мерцающую / мерцающую анимацию». Но я не могу обернуть голову вокруг хорошего метода для этого, так что как лучше настроить его, как я пытался?
У меня есть два отдельных массива. Значения относятся к атрибутам данных HTML элементов.
Пример массивов:
first = [1, 3, 5, 7];
second = [2, 4, 6, 8];
Пример HTML элемент:
<span class="item" data-item="2">Second Item</span>
Если условие встретился (или, скажем, по событию щелчка) Я хочу запустить следующую последовательность:
- К каждому элементу массива «первый» следует добавить класс «активный».
- Через 1 секунду класс «активный» должен быть удален из каждого «первого» элемента массива.
- При этом к каждому элементу массива «секунда» должен быть добавлен класс «активный».
- Через 1 секунду (или фактически всего 2 секунды)
«активный» класс должен быть удален из «вторых» элементов массива,
и снова добавлен в «первые» элементы массива.
Затем через 1 секунду каждый отдельный элемент (первого и второго) получит класс «активный». Таким образом, каждый элемент теперь активен.
В данный момент я использую несколько вызовов setTimeout и .each, но я нахожу это грязным.
first = [1, 3, 5, 7];
second = [2, 4, 6, 8];
// directly set array "first" items to active
$.each(first, function(value) {
$('.items').find('[data-item="' + value + '"]').addClass('active');
});
// after 1 second, remove class from "first" items, add class to "second" items
setTimeout(function() {
$.each(first, function(value) {
$('.items').find('[data-item="' + value + '"]').removeClass('active');
});
$.each(second, function(value) {
$('.items').find('[data-item="' + value + '"]').addClass('active');
});
}, 1000);
// after 2 seconds, remove class from "second" items, add class to "first" items
setTimeout(function() {
$.each(second, function(value) {
$('.items').find('[data-item="' + value + '"]').removeClass('active');
});
$.each(first, function(value) {
$('.items').find('[data-item="' + value + '"]').addClass('active');
});
}, 2000);
// after 3 seconds, add class to all items
setTimeout(function() {
$('.item').addClass('active');
}, 3000);