Ответ 1
Вы можете сделать что-то вроде этого, это полная версия для переключения:
$("#mySelector").animate({ height: 'toggle', opacity: 'toggle' }, 'slow');
Для строго затухания:
$("#mySelector").animate({ height: 0, opacity: 0 }, 'slow');
Я нашел jQuery: FadeOut, затем SlideUp, и это хорошо, но это не тот.
Как я могу fadeOut()
и slideUp()
одновременно? Я пробовал два разных вызова setTimeout()
с той же задержкой, но slideUp()
произошел сразу после загрузки страницы.
Кто-нибудь это сделал?
Вы можете сделать что-то вроде этого, это полная версия для переключения:
$("#mySelector").animate({ height: 'toggle', opacity: 'toggle' }, 'slow');
Для строго затухания:
$("#mySelector").animate({ height: 0, opacity: 0 }, 'slow');
Непосредственная анимация высоты приводит к резким движениям на некоторых веб-страницах. Однако сочетание CSS-перехода с jQuery slideUp()
обеспечивает плавное исчезновение.
const slideFade = (elem) => {
const fade = { opacity: 0, transition: 'opacity 0.5s' };
elem.css(fade).slideUp();
}
slideFade($('#mySelector'));
возитесь с кодом:
https://jsfiddle.net/00Lodcqf/435
В некоторых ситуациях очень быстрая 100-миллисекундная пауза для большего затухания создает немного более плавное впечатление:
elem.css(fade).delay(100).slideUp();
Это решение, которое я использовал в проекте dna.js, где вы можете просмотреть код (github.com/dnajs/dna.js) для функции dna.ui.slideFade()
, чтобы увидеть дополнительную поддержку переключения и обратные вызовы.
Принятый ответ "Nick Craver" - это, безусловно, путь. Единственное, что я добавил бы, это то, что его ответ фактически не "спрятал" его, а DOM все еще видит в нем жизнеспособный элемент для отображения.
Это может быть проблемой, если у вас есть поля или отступы на элементе "slid"... они все равно будут отображаться. Поэтому я просто добавил обратный вызов функции animate(), чтобы скрыть ее после завершения анимации:
$("#mySelector").animate({
height: 0,
opacity: 0,
margin: 0,
padding: 0
}, 'slow', function(){
$(this).hide();
});
Это можно сделать с помощью slideUp
и fadeOut
следующим образом:
$('#mydiv').slideUp(300, function(){
console.log('Done!');
}).fadeOut({
duration: 300,
queue: false
});
У меня была аналогичная проблема и исправил ее так.
$('#mydiv').animate({
height: 0,
}, {
duration: 1000,
complete: function(){$('#mydiv').css('display', 'none');}
});
$('#mydiv').animate({
opacity: 0,
}, {
duration: 1000,
queue: false
});
свойство queue сообщает ему, нужно ли очереди анимации или просто воспроизводить ее прямо сейчас
Бросив еще одну доработку, основанную на @CodeKoalas. Он учитывает вертикальный запас и отступы, но не горизонтальный.
$('.selector').animate({
opacity: 0,
height: 0,
marginTop: 0,
marginBottom: 0,
paddingTop: 0,
paddingBottom: 0
}, 'slow', function() {
$(this).hide();
});