Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Код выполняется не по порядку (https://javascript.ru/forum/jquery/76741-kod-vypolnyaetsya-ne-po-poryadku.html)

begovik 09.02.2019 00:41

Код выполняется не по порядку
 
Здравствуйте.
У меня простой код, который должен делать картинку невидимой, менять ссылку на картинку и делать уже другую картинку видимой.
Но код сначала меняет ссылку, а потом скрывает и показывает замененную картинку. Подскажите, в чём дело...
$("nav").on("click", "div", function () {
   $(".photo img").fadeTo(400, 0);
   $(this).addClass("current").siblings().removeClass("current");
   $(".photo img").attr("src", $(this).attr("link"));
   $(".photo img").fadeTo(400, 1);
   return false;
})

j0hnik 09.02.2019 01:55

Дело в том что интерпретатор js не будет ждать пока ваш fade выполняется, задержку для остального кода надо добавить самому.

begovik 09.02.2019 04:41

А что нужно дописать?

j0hnik 09.02.2019 06:11

$("nav").on("click", "div", function () {
	$(".photo img").fadeTo(400, 0, function () {
	$(this).addClass("current").siblings().removeClass("current");
	$(this).attr("src", $(this).attr("link"));
	$(this).fadeTo(400, 1);
	});
});

begovik 09.02.2019 13:16

Спасибо, j0hnik, всё работает!
Вот пока разбирался, несколько раз приходила мысль: "вот если бы к .fadeTo можно было бы дописать третий параметр...", а оно оказывается можно))
Немного переделал код, а то он атрибут от себя к себе присваивал, вот как получилось:
HTML:
<div class="container outer">
      <div class="photo"><img src="imgs/7.jpg" alt=""></div>
      <nav>
        <div class="current" link="imgs/7.jpg"><img src="imgs/7.jpg" alt=""></div>
        <div link="imgs/8.jpg"><img src="imgs/8.jpg" alt=""></div>
        <div link="imgs/9.jpg"><img src="imgs/9.jpg" alt=""></div>
      </nav>
    </div>

и JS:
$("nav").on("click", "div", function () {
   $(this).addClass("current").siblings().removeClass("current");
   $(".photo img").fadeTo(400, 0, function(){
   $(this).attr("src", $("nav .current").attr("link"));
   $(this).fadeTo(200, 1);
   });
})


Часовой пояс GMT +3, время: 17:01.