jQuery плавное изменение innerHTML

у меня есть код ниже работает как шарм:

var div = $('#div');
div.html('<div>one line</div><div>another line</div>');
div.slideDown('slow');

но проблема возникает, когда мне нужно изменить содержимое (количество строк):

div.html('<div>one line replacement</div><div>another line replacement</div><div>third line</div>')

этот переход слишком быстро. Как оживить это?

5 ответов


вы можете добавить невидимый диапазон в html:

<span class="foo" style="display: none">some other lines</span>

и затем исчезать:

$("span.foo").fadeIn('slow');


Идя по вашему редактированию, вы также можете рассмотреть:

div.slideUp('slow'); // you may want this to be 'fast'
div.html('some other lines');
div.slideDown('slow');

морщинка на ответе Даниэля Слуфа:

div.fadeOut('fast', function() {
  div.html(html);
  div.fadeIn('fast');
}

это гарантирует, что ваша первая анимация будет завершена перед продолжением. В моем нынешнем случае, по крайней мере, выцветание делает более приятный опыт, чем скольжение.


возможно, если вы поместите дополнительные строки в div с display: none style, то вы можете исчезнуть в этом div, что - то вроде этого (концепция-код не проверен):

div.html("<div id='next_line' style='display:none'>some other lines</div>");
$("#next_line").fadeIn('slow');

Если вы хотите, чтобы это заняло определенное время, то:

div.slideDown(numberOfMilliseconds);

Томас упомянул " slideDown (numberOfMilliseconds)". Я пробовал это, и документ jquery определил скорость в миллисекундах-это время, необходимое для выполнения amimation.

в этом случае 1 строка или 10 строк займет столько же времени, чтобы скользить. Если вы знаете номер строки, возможно, вы можете добавить множитель, например slideDown (lineCount * speedInMS)