Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 04.04.2018, 16:43
Аспирант
Отправить личное сообщение для winch Посмотреть профиль Найти все сообщения от winch
 
Регистрация: 30.04.2015
Сообщений: 87

хотя можно конечно сохранить полученный набор в переменную, а потом уже с ней работать...

Ладно, всё понятно, вопрос решен. всем спасибо!
Ответить с цитированием
  #12 (permalink)  
Старый 04.04.2018, 16:47
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от winch
а чтобы получить последний элемент, надо ещё раз делать запрос по этому же селектору?
как-то не очень лаконично получается.
Зачем, набор уже сохранен в переменной, получайте в наборе последний и сравнивайте с this.

Но если это для - выполняем что-то для элементов набора, а если последний в наборе, то ... Иначе вам нужно то, что писал Nexus. Правда уже скрытый скрывать за время Т ни к чему, корректней такая тогда запись
$('div').not(':last').hide(300).end().last().hide( 300,function() ....

PS. Если выполнить раз, не важно в какой последовательности, то

$(selector).hide(time).last().hide(function() {....})

так как скрытый уже не будет вновь скрываться, просто функция выполнится после скрытия всех.

Последний раз редактировалось laimas, 04.04.2018 в 16:59.
Ответить с цитированием
  #13 (permalink)  
Старый 05.04.2018, 07:54
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Сообщение от laimas
Правда уже скрытый скрывать за время Т ни к чему, корректней такая тогда запись
$('div').not(':last').hide(300).end().last().hide( 300,function()
Можно просто очистить очередь анимации для последнего элемента, так короче будет.
$('div').hide(300).last().stop(true).hide(300,callback);
Ответить с цитированием
  #14 (permalink)  
Старый 05.04.2018, 08:48
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

Усложним задачу: а если на некоторых из этих элементов уже висят какие-то анимации (поэтому они скроются позже последнего), а колбэк надо выполнить только когда все элементы будут скрыты? ;-)
Ответить с цитированием
  #15 (permalink)  
Старый 05.04.2018, 09:25
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Белый шум, как вариант
var counter = 0,
    callback = () => {
        ++counter >= len && alert('Complete');
    },
    len = $('div').hide(300, callback).length;
Ответить с цитированием
  #16 (permalink)  
Старый 05.04.2018, 12:32
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Nexus
Можно просто очистить очередь анимации
Да можно как угодно. )
Ответить с цитированием
  #17 (permalink)  
Старый 05.04.2018, 20:59
Аспирант
Отправить личное сообщение для winch Посмотреть профиль Найти все сообщения от winch
 
Регистрация: 30.04.2015
Сообщений: 87

Сообщение от Белый шум Посмотреть сообщение
Усложним задачу: а если на некоторых из этих элементов уже висят какие-то анимации (поэтому они скроются позже последнего), а колбэк надо выполнить только когда все элементы будут скрыты? ;-)
Да, в моем случае так и получилось. Некоторые пункты заканчивали анимацию позже последнего. (заметил это когда я стал отлаживать)
Окончательный код я сделал такой:
var sel = $(".menu1 .MenuItem > div");
var i = 1;  
sel.slideUp(700, function(){
   if (sel.length == i++) 
	DoCallback();
});
Ответить с цитированием
  #18 (permalink)  
Старый 06.04.2018, 04:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

var sel = $(".menu1 .MenuItem > div").slideUp(700, function(){
   if (sel.last() == this) DoCallback();
});


и считать ничего не надо.
Ответить с цитированием
  #19 (permalink)  
Старый 06.04.2018, 05:17
Аспирант
Отправить личное сообщение для winch Посмотреть профиль Найти все сообщения от winch
 
Регистрация: 30.04.2015
Сообщений: 87

Сообщение от laimas Посмотреть сообщение
var sel = $(".menu1 .MenuItem > div").slideUp(700, function(){
   if (sel.last() == this) DoCallback();
});

и считать ничего не надо.
Это будет неправильно работать, потому что последний элемент в выборке и элемент последним заканчивающий свою анимацию - это могут быть разные элементы.
Ответить с цитированием
  #20 (permalink)  
Старый 06.04.2018, 05:24
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Ну если строго так нужно, тогда да.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выполнить функцию после выполнения другой? allanmiln Events/DOM/Window 2 04.03.2013 03:03
Выполнить функцию после выполнения загрузчика ilion Элементы интерфейса 1 21.02.2013 18:33
Выполнить функцию после окончания всей анимации De-Luxis jQuery 2 24.11.2011 17:11
Выполнить код после обработки скрипта RasimS Общие вопросы Javascript 2 11.02.2011 15:25
Выполнить код после загрузки изображения EugenyK Events/DOM/Window 2 15.07.2008 10:09