С Новым годом! Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
 Аватар для Black_Star
23 / 22 / 17
Регистрация: 06.05.2016
Сообщений: 260

Поочередное добавление анимации, цикл

02.11.2016, 10:41. Показов 3813. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день уважаемые. Подскажите, пожалуйста, как каждому элементу по очереди добавлять классы с анимацией ?
https://jsfiddle.net/y17yk4bh/1/
Оно должно работать так.
1) Первый элемент блока получает классы с анимацией
2) Происходит анимация этого блока
3) По окончанию этой анимации у данного блока меняется ширина на высоту, а высота на ширину.
4) Следующий блок получает классы с анимацией по окончанию этой анимации у данного блока меняется ширина на высоту, а высота на ширину.
5) Цикл длиться пока данные действия не получат все блоки.

ПС. Не могу понять почему мой код не срабатывает
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.11.2016, 10:41
Ответы с готовыми решениями:

Цикл для анимации
Попробовал сделать анимацию на Jquery, получилось как-то кривовато и в Firefox не работает функция mouseout. Думаю оформить код в виде...

Скрытие элементов и добавление текста разным группам div по завершении анимации.
Доброго всем! Есть задача: 4 дива разделенные на 2 класса one и two надо: по щелчку на кнопке, скрыть дивы первого класса, и по...

Поочередное добавление/удаление id по клику на элемент
Доброго времени суток. У меня возникла такая проблема, есть список ul, мне нужно чтобы по клику на его элемент li, этому элементу...

5
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
02.11.2016, 11:48
Black_Star, как вы думаете, что находится в this в конексте выполнения анонимной функции в setTimeout?
JavaScript
1
2
3
setTimeout(function() {
  $(this).addClass('animated flip'); // не работает
}
0
 Аватар для Black_Star
23 / 22 / 17
Регистрация: 06.05.2016
Сообщений: 260
02.11.2016, 12:19  [ТС]
Думал что находиться элемент цикла (i) от #bigBlock с которым я сейчас и работаю в интервале времени setTimeout. Собственно я пробовал задавать и так $elem[i].addClass('animated flip'); но у меня оно тоже не работает.
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
02.11.2016, 13:23
В цикле for, не надо уменьшать len на единицу, так как в условии i < len
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var $elem = $('#bigBlock div');
var len = $('#bigBlock div').length;
var i = 0;
 
function change() {
  for (i = 0; i < len; i++) {
    (function(i) {
      var el = $elem[i],
        width = el.scrollWidth,
        height = el.scrollHeight;
      setTimeout(function() {
        $(el).addClass('animated flip'); // не работает
        el.style.width = height + 'px';
        el.style.height = width + 'px';
      }, 1000 * i);
    })(i);
  }
}
setTimeout(change, 1000);
https://jsfiddle.net/j2FunOnly/o90zjp3u/
В jQuery есть итератор each
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var $elem = $('#bigBlock div');
var len = $('#bigBlock div').length;
var i = 0;
// $elem.addClass('animated flip')
function change() {
    $elem.each(function (i, el) {
    setTimeout(function () {
        $(el).addClass('animated flip');
      var w = el.scrollWidth;
      el.style.width = el.scrollHeight + 'px';
      el.style.height = w + 'px';
    }, 1000 * i);
  });
}
setTimeout(change, 1000);
https://jsfiddle.net/j2FunOnly/o90zjp3u/1/
1
 Аватар для vettel
84 / 84 / 41
Регистрация: 14.02.2015
Сообщений: 320
02.11.2016, 13:30
Лучший ответ Сообщение было отмечено Black_Star как решение

Решение

Black_Star, сразу, что бросилось в глаза - это ошибка в цикле.
У вас цикл до конца не дойдет.
Вот здесь (строка 12):
JavaScript
1
for (i = 0; i < len-1; i++)
Сами подумайте - у вас 3 элемента, значит переменная len равна 3. 3-1=2. Цикл работает по условию i < 2. То есть он отработает лишь 2 раза - пока i = 0 и пока i=1. А должен 3 раза.
Какой сакральный смысл строки 5, если вы все равно заново определяете переменную при создании цикла?

Идем дальше. А вы вообще проверяли, работал ли у вас вообще код внутри window.onload? Не проверяли. Иначе бы сразу заметили, что там вообще ничего не работает. А знаете почему? Потому что вы УЖЕ выбрали на JsFiddle тип загрузки скрипта onLoad. Вот где это выбирается:
http://take.ms/GlJwH
Естественно, что код внутри window.onload работать не будет, потому что он запускается уже после самого события. Обработчик, повешенный на событие уже после его выполнения не работает (я думаю, не стоит объяснять почему, это азы работы с событиями в JS).

Пофиксили этот момент, идем дальше. Почему вы в коде мешаете pureJS и jQuery? Из-за этого ничего и не работает.
Поймите, если вы делаете выборку с помощью jQuery (типа $('#bigBlock div') ), то она вернет вам не DOM-объект, а объект jQuery со своими свойствами и методами. У этого объекта jQuery НЕ БУДЕТ свойств scrollWidth, scrollHeight и style, они есть только в чистых DOM-объектах. Поэтому у вас 2 пути:
1) Правильный: юзать свойства и методы jQuery (то есть не style, а css() и так далее).
2) Извращенный: доставать из jQ-объектов "чистые" DOM-объекты посредством get() либо просто [0] и работать с ними.
Это серьезная ошибка.

Идем далее.
JavaScript
1
var el = $elem[i]
Это бред. Если вы хотите достать какой-то по очередности div, то юзайте jQ-метод eq(). Скажем,
JavaScript
1
var el = $elem.eq(i)
Ну и проблема с this уже озвучена, но на самом деле это мелочь по сравнению с тем, что я описал выше.

Вот этот код работает (я поправил в вашей песочнице):
https://jsfiddle.net/y17yk4bh/4/
Это на скорую руку. Вообще лучше перепишите в согласии с замечаниями выше. Потому что я там просто доставал DOM вместо юзания jQuery-методов, чтобы по-быстрому.

Ну и вообще, вместо for в данном случае лучше гораздо юзать jQ-метод each.

Вроде развернутый ответ написал, как мог. Подучивайте pureJs и возможности jQuery
1
 Аватар для Black_Star
23 / 22 / 17
Регистрация: 06.05.2016
Сообщений: 260
02.11.2016, 15:45  [ТС]
Огромное спасибо, за столь развернутые ответы. У меня ещё вопрос по данной теме.
Как доделать так что б оно работало следующим образом

1)Есть большое поле с дивами(у каждого свои размеры и каждый занимает свою позицию в пространстве + каждый див имеет класс picture1);
2)Ждем 2сек (- это время первой задержки, во время нее ничего не происходит)
3) Первому диву данного блока прискаевается классы с анимацией .toggleClass('animated flip') ( время анимации я задаю через CSS свойства, допустим 1сек) + класс picture1 заменяется picture2 только у этого дива
4) Первый див меняет свои размеры (высота=ширине, ширина=высоте)
5) Первый (уже измененный) див меняет свое положение в пространстве.
6) С первого класса удаляются классы анимации .toggleClass('animated flip')
7) пункты 3-6 проделываются по очереди с каждым дивом до i<$('#bigBlock div').length;
8) Все дивы заняли новые позиции, и у них всех есть класс picture2 . Ждем 2сек.
9)Идет повтор от 3 - 6 для каждого дива .
10) Все дивы заняли новые позиции, и у них всех есть класс picture3 . Ждем 2сек.
11) Цикл продолжается пока не доходит picture N
12) Цикл идет с picture N в picture 1

На данном этапе, я завис на п.3, оно хоть и меняет классы, да только свойства не присваиваются. (То есть нету смещения этих дивов, нету изменения свойства background ну и остального)
https://jsfiddle.net/y17yk4bh/7/

+ ко всему мне в консоль ошибка сыпится
[PICTURE] [/PICTURE]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.11.2016, 15:45
Помогаю со студенческими работами здесь

Поочередное проигрывание анимации текста в Power Point 2007
Как сделать в Power Point чтоб не сразу был виден текст весь, а появлялся поочередно? Как сделать чтоб вначале появился один текст, потом...

Поочередное добавление данных в DataGridView
Всем привет. Есть папка с хмл файлами. Их много, шас примерно 27000. В приложении есть фильтр на создание документа. Если файл подходит к...

Поочередное добавление элементов к картинке в оконном приложении Java
Написал код для игры &quot;Виселица&quot; на java. Хотелось бы поинтересоваться, возможно ли добавлять элементы виселицы на форме? Допустим, игрок...

Цикл внутри анимации
подскажите начимающему почему работает этот код- const el = document.querySelector('#myRange'); const cx =...

Цикл и задержка анимации SVG
Здравствуйте! Есть Анимированный SVG Текст. https://codepen.io/FeeFort/pen/jdZKXE . Анимация зацикливается. Без задерки. Как сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru