Как исчезнуть для отображения: встроенный блок

На моей странице у меня есть куча (около 30) узлов dom, которые должны быть добавлены невидимыми и исчезают, когда они полностью загружены.
Элементам нужен стиль display: inline-block.

Я хотел бы использовать функцию jquery .fadeIn (). Для этого необходимо, чтобы элемент изначально имел display: none; правило, чтобы изначально скрыть это. После fadeIn () элементы вне курса имеют отображение по умолчанию: inherit;

Как я могу использовать функцию затухания с отображаемым значением, отличным от наследования?


person Boris Callens    schedule 07.07.2009    source источник


Ответы (6)


Вы можете использовать функцию jQuery animate, чтобы самостоятельно изменить прозрачность, не затрагивая отображение.

person philnash    schedule 07.07.2009
comment
Мне больше нравится это решение, он не допускает использования CSS в моем JS. - person joshuadelange; 17.07.2013
comment
@joshuadelange не совсем, непрозрачность тоже CSS - person Roy; 11.02.2014
comment
+1 за фокусировку инженерного процесса показа / скрытия элементов там, где они должны быть. - person klewis; 16.05.2014

Чтобы конкретизировать хорошую идею Фила, вот fadeIn (), который загружает фейды в каждый элемент с классом .faded по очереди, преобразованным в animate ():

Старый:

$(".faded").each(function(i) {
    $(this).delay(i * 300).fadeIn();
});

Новый:

$(".faded").each(function(i) {
    $(this).delay(i * 300).css('opacity',0).animate({'opacity': 1}, 500);
});

Надеюсь, это поможет другому новичку jQuery, как я :) Если есть способ лучше, сообщите нам!

person Mere Development    schedule 19.11.2011

Ответ Макуры не сработал для меня, поэтому мое решение было

<div id="div" style="display: none">Some content</div>

$('#div').css('display', 'inline-block').hide().fadeIn();

hide немедленно применяет display: none, но перед этим сохраняет текущее отображаемое значение в кэше данных jQuery, которое будет восстановлено при последующих вызовах анимации.

Итак, div начинает статически определяться как display: none. Затем он устанавливается на inline-block и сразу же скрывается, чтобы вернуться к inline-block.

person Clodoaldo Neto    schedule 27.01.2014

Согласно документации jQuery для .show(),

Если элемент имеет отображаемое значение inline, затем скрывается и отображается, он снова будет отображаться встроенным.

Итак, моим решением этой проблемы было применение правила css к классу display: inline-block для элемента, затем я добавил еще один класс под названием «hide», который применяет display: none; Когда я .show() на элементе, он был встроен.

person amurrell    schedule 05.08.2013
comment
Я предполагаю, что это также должно работать, когда вы устанавливаете #el{display:inline-block;display:none;}, а затем запускаете $('#el').fadeIn();, вы получаете встроенный блок. Но это не так. - person Fanky; 23.01.2018

Это работает даже с display:none, предустановленным css. Использовать

$('#element').fadeIn().addClass('displaytype');

(а также $('#element').fadeOut().removeClass('displaytype');)

с настройкой в ​​CSS:

#element.displaytype{display:inline-block;}

Я считаю, что это обходной путь, поскольку я считаю, что fadeIn() должен работать так, чтобы он просто удалил последнее правило - display:none, если установлено значение #element{display:inline-block;display:none;}, но он неправильно удаляет оба.

person Fanky    schedule 23.01.2018

person    schedule
comment
Это определенно лучший ответ. - person Jason; 23.02.2013
comment
Отличный ответ! Более того, вы можете оставить его пустым по умолчанию для всего, что у вас есть в вашем CSS: $("div").fadeIn().css("display",""); - person Brandon Durham; 08.02.2014
comment
Это действительно должен быть принятый ответ; существующий принятый ответ - это скорее комментарий. - person Sinister Beard; 30.09.2015
comment
$("div").fadeIn("400", function(){ $(this).css("display","inline-block"); });, чтобы убедиться, что display: inline-block выполняется после завершения затухания - person Simon; 20.09.2016
comment
это не работает для меня ... применяется к div с начальным стилем отображения, установленным на none, с использованием класса. Осматривая элемент, я вижу, что в течение нескольких миллисекунд, сразу после вызова fadeIn, он имеет встроенный блок в своем стиле, а затем стиль установлен на блок. с предложением Саймона эффект неприятный, так как во время fadeIn элемент отображается как блок - person Giox; 07.11.2016
comment
В IE Edge это вызывает эффект мерцания, что делает этот маршрут непригодным для использования в этом браузере. - person Phyllis Sutherland; 08.12.2017
comment
Лучшее решение в 2019 году - person Esteban Castro Sola; 01.04.2019
comment
ух ... теперь ты счастлив - person Kennet Celeste; 17.08.2019