Как работают dadeIn и fadeOut
Объясните пожалуйста, почему в примере, loader.fadeOut(300, funct....) не скрывет картинку(loader)?
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>FadeUtIn</title> <style> .im-hidden { display: none; } </style> </head> <body> <div class="wrap"> <div class="block"> <button class="calc">Расчитать</button> <span class="im-hidden"> <img src="loader.gif" alt=""> </span> </div> </div> <script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script> <script> $(document).ready(function(){ $('.calc').click(function(e){ e.preventDefault(); var $this = $(this), parent = $this.parent(), loader = $this.next(); $this.fadeOut(300, function(){ loader.fadeIn() }) loader.fadeOut(300, function() { $this.fadeIn(); }); }); }); </script> </body> </html> |
nick032,
$(document).ready(function(){ $('.calc').click(function(e){ e.preventDefault(); var $this = $(this), parent = $this.parent(), loader = $this.next(); $this.fadeOut(300, function(){ loader.fadeIn(f) }) function f() { loader.fadeOut(300, function() { $this.fadeIn(); }); } }); }); |
Спасибо большое!
Подскажите пожалуйста, как в ajax запросе выполнить скрытие лоэдера при успешно выполнении запроса? В примере, лоэдер не скрывается, не пойму в каком порядке функции выполняются. Экспериментально выявил что первым выполняется list.html(res);, а затем loader.fadeIn(300); что приводит к показу лоэдера. $('#favorites-del-all').click(function(e){ //e.preventDefault(); //if( !confirm("Подтвердите удаление") ) return; var $this = $(this), parent = $this.parent(), loader = $this.next(), list = parent.prev(); $.ajax({ type: 'POST', url: ajaxurl, data: { security: Favorites.nonce, action: 'favorites_dell_all', }, beforeSend: function(){ $this.fadeOut(300, function(){ loader.fadeIn(300); }) }, success: function(res){ loader.fadeOut(300, function(){ list.html(res); }); }, error: function(){ alert(Ошибка); } }); }); |
nick032,
вариант... $(function() { $('#favorites-del-all').click(function(e){ //e.preventDefault(); //if( !confirm("Подтвердите удаление") ) return; var $this = $(this), parent = $this.parent(), loader = $this.next(), list = parent.prev().hide(); $.ajax({ type: 'POST', url: ajaxurl, data: { security: Favorites.nonce, action: 'favorites_dell_all', }, beforeSend: function(){ $this.fadeOut(300); loader.fadeIn(300); }, success: function(res){ loader.stop().fadeOut(300, function(){ list.html(res).show(); }); }, error: function(){ alert('Ошибка'); } }); }); }); |
рони,
Спасибо большое, все работает. Можете сказать почему в первом варианте такая последовательность выполнения функций? |
nick032,
потому что нет stop и скрытие накладывается на открытие(неизвестно кто победит), либо использовать callback выстраивая очередь анимаций(если это возможно), либо останавливать предыдущую анимацию перед запуском новой. |
рони,
Все понял, спасибо большое за помощь! |
Часовой пояс GMT +3, время: 19:23. |