|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.02.2019, 22:40 | #1 |
Пользователь
Регистрация: 08.03.2010
Сообщений: 48
|
Код выполняется "не по порядку"
Здравствуйте.
У меня простой код, который должен делать картинку невидимой, менять ссылку на картинку и делать уже другую картинку видимой. Но код сначала меняет ссылку, а потом скрывает и показывает замененную картинку. Подскажите, в чём дело... Код:
|
09.02.2019, 00:26 | #2 |
Раздолбайских Дел
Старожил
Регистрация: 22.05.2009
Сообщений: 3,828
|
Потому что анимация — это асинхронная операция. Она не будет блокировать синхронные действия.
Почитай доку jQuery, у них для любой анимации есть колбэк, который выполнится по её завершении. Если вкратце: .fadeTo, (он же сокращение для .animate, но без указания точной функции преобразования), говорит как бы: "смотри, вот тебе 400 миллисекунд, сделай мне за них из `этого` — `это`", и jQuery запускает рекурсивную серию setTimeout, которые осуществляют изменение параметров раз в ~20мс. (я это знаю, потому что сам переписывал jQ.animate на более прогрессивный requestAnimationFrame) Любой асинхронный таймаут ставит выполнение своей функции (колбэка) в асинхронную очередь на определенный промежуток времени. И пока до очереди этого промежутка не дойдет очередь (делаешь сеттаймаут с алертом, а после него while(1)), он не запустится (с while(1) alert не сработает никогда). синхронное выполнение программы заблокирует все ресурсы браузера. Один из банальнейших вопросов на собеседованиях уже лет 10: Код:
Почитай про асинхронку, посмотри лекции ШРИ Яндекса, учебник Ильи Кантора.
Alar, верни репу!
|
09.02.2019, 01:37 | #3 |
Пользователь
Регистрация: 08.03.2010
Сообщений: 48
|
А-хах! Спасибо, Naive, ты настоящий программер, дал ответ на поставленный вопрос) (я без сарказма).
Но как же переделать код, чтоб он выполнялся по задуманному алгоритму, я это имел в виду, создавая тему? Я понемногу развиваюсь, в изучении JS, и когда-нибудь дойду до понимания этих глубин, но сейчас мне просто нужно чтоб код выполнил то, что я задумал. P.S. В выражениях jQ.animate и requestAnimationFrame я понимаю только то, что они оба работают с анимацией. |
09.02.2019, 07:18 | #4 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,759
|
Так вам же написали - добавьте код, который должен выполняться после анимации в коллбек для fadeTo.
|
09.02.2019, 13:24 | #5 |
Пользователь
Регистрация: 08.03.2010
Сообщений: 48
|
А, понятно, я не знал, что для него можно дописывать третий параметр.
Спасибо ребят, всё получилось. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Убрать папки "Pictures", "Music", "Видео", "Downloads" из "МОЙ КОМПЬЮТЕР" | Бахтиёр1916 | Windows | 1 | 05.04.2017 12:53 |
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") | ZIRASS | PHP | 4 | 15.06.2016 14:23 |
Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" | link90 | Общие вопросы C/C++ | 2 | 27.03.2016 12:34 |