Використовуючи фадеїн і додавати


74

Я завантажую дані JSON на свою сторінку і використовую, appendTo()але я намагаюся зникати в результатах, будь-які ідеї?

$("#posts").fadeIn();
$(content).appendTo("#posts");

Я побачив, що між документами є різниця між appendі appendTo,.

Я також спробував це:

$("#posts").append(content).fadeIn();

Я зрозумів, вищезгадане зробило трюк!

Але я отримую "undefined"як одне з моїх значень JSON.

Відповіді:


169

Якщо ви приховуєте вміст, перш ніж додати його, і прив’яжете до нього метод fadeIn, ви повинні отримати ефект, який ви шукаєте.

// Create the DOM elements
$(content)
// Sets the style of the elements to "display:none"
    .hide()
// Appends the hidden elements to the "posts" element
    .appendTo('#posts')
// Fades the new content into view
    .fadeIn();

Я намагаюся $ (elem) .slideUp (). AppendTo (div) .slideDown (); але він робить це не по порядку в FF5. Я використовую зворотний виклик slideUp, щоб потім додати і slideDown по порядку, але тоді додаток не має зворотного виклику, тому елемент здається вже видимим. Відповідь Кента Фредріка стосується цього питання, тому мене турбує лише додаток, який виконується перед слайдом Вниз.
TuteC

1
Відповідь Кента звертається за допомогою методів анімації, таких як slideUp та slideDown із зворотними викликами, але OP дійсно потребувала анімації лише в кінці ланцюжка методів. Вам потрібна подальша допомога?
Кевін Горський

7

Я не знаю, чи розумію я повністю вашу проблему, але щось на зразок цього має спрацювати:

HTML:

<div id="posts">
  <span id="post1">Something here</span>
</div>

Javascript:

var counter=0;

$.get("http://www.something/dir",
    function(data){
        $('#posts').append('<span style="display:none" id="post' + counter + ">" + data + "</span>" ) ;
        $('#post' + counter).fadeIn();
        counter += 1;
    });

В основному ви обгортаєте кожну частину вмісту (кожну "публікацію") в проміжок, встановлюючи відображення цього проміжку жодним, щоб він не відображався, а потім затухаєте.


Чудовий приклад того, як робити прості речі дуже складно. Sorry man;)
Sliq

4

Я думаю, це має вирішити вашу проблему.

$('#content').prepend('<p>Hello!</p>');
$('#content').children(':first').fadeOut().fadeIn();

Якщо замість цього ви додаєте додаток, вам доведеться використовувати селектор: last.


3

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


   commmand(); 
   animation(); 
   command();  

This is because the animation uses set timeout and other similar magic to do its job and settimeout is non-blocking.

This is why we have callback methods on animations to run when the animation is done ( to avoid changing something which doesn't exist yet )

   command(); 
   animation( ... function(){ 
      command(); 
   });


2

припускаючи, що в css визначено таке:

.new {display:none} 

і javascript повинен бути:

$('#content').append('<p class='new'>Hello!</p>');
$('#content').children('.new').fadeIn();
$('#content').children.removeClass('new');
$('#content').children('.new').hide();

1

По-перше, це перетворення отриманих даних у jQuery Object. По-друге, негайно сховайте. По-третє, додайте його до цільового вузла. І, після всього цього, ми можемо чітко використовувати необхідну анімацію, як fadeIn :)

jNode = $("<div>first</div><div>second</div>");
jNode.hide();
$('#content').append(jNode);
jNode.fadeIn();

0

у мене є дорога, для цього:

$("dt").append(tvlst.ddhtml);
$("dd:last").fadeIn(700);

Що "дорого"?
Панг

0

Я спробував, як ви сказали, трюк, але не працює. він працював із наступним кодом

$("div").append("content-to-add").hide().fadeIn();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.