Як зникнути для відображення: вбудований блок


98

На своїй сторінці у мене є купа (близько 30) вузлів dom, які слід додати невидимо, і зникають, коли вони повністю завантажені.
Елементи потребують відображення: стиль вбудованого блоку.

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

Як я можу використовувати функцію зникнення з відображуваним значенням, відмінним від успадкованого?

Відповіді:


39

Ви можете використовувати анімаційну функцію jQuery, щоб самостійно змінити непрозорість, не залишаючи дисплей незамінним.


Мені подобається це рішення краще, він тримає CSS від мого JS.
Джошуаделанж

14
@joshuadelange не дуже, непрозорість також CSS
Roy

+1 для зосередження інженерного процесу показу / приховування елементів на тому, де він повинен бути.
klewis

233

$("div").fadeIn().css("display","inline-block");


5
Це, безумовно, краща відповідь.
Джейсон

25
Чудова відповідь! Ще краще, ви можете залишити його порожнім за замовчуванням до того, що ви маєте в своєму CSS:$("div").fadeIn().css("display","");
Брендон Дарем

1
Це дійсно повинно бути прийнятою відповіддю; існуюча прийнята відповідь - це більше коментар.
Зловісна борода

$("div").fadeIn("400", function(){ $(this).css("display","inline-block"); });щоб бути впевненим, що дисплей: вбудований блок робиться, коли закінчується Fadein
Саймон

для мене це не працює ... застосовується до діва з початковим стилем відображення, встановленим жодним за допомогою класу. Оглядаючи елемент, я бачу, що протягом декількох мілісекунд, відразу після виклику fadeIn, він має вбудований блок у своєму стилі, тоді стиль встановлюється на блокування. із пропозицією Саймона ефект не приємний, оскільки під час згасання елемент відображається як блок
Giox

11

Для того, щоб чітко сформувати хорошу ідею Філа, ось 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, як я :) Якщо є кращий спосіб зробити це, будь ласка, скажіть нам!


9

Відповідь Макура для мене не спрацювала, тому моє рішення було

<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


2

Згідно з документами jQuery для .show(),

Якщо для елемента є відображене значення вбудованого рядка, він прихований і показаний, він ще раз відобразиться в рядку.

Тому моє рішення цієї проблеми було застосувати правило css до дисплея класу: inline-block на елементі, потім я додав ще один клас під назвою "сховати", який застосовує display: none; Коли я .show()на елементі, він показав встроєний.


Я би припустив, що це також має працювати, коли ви встановлюєте, #el{display:inline-block;display:none;}а потім запускаєте, $('#el').fadeIn();ви отримуєте вбудований блок. Але це не так.
Fanky

0

Це працює навіть із 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;}але воно несправно видаляє обидва.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.