2009-10-05 10 views
125

Jak mogę używać .append() z efektami jak show('slow')jQuery korzystając dołączania z efektami

mające skutki na append nie wydają się działać w ogóle, a to daje taki sam wynik jak normalnego show(). Bez przejść, bez animacji.

Jak dodać jeden element div do innego i czy ma on na sobie efekt slideDown lub lub ?

Odpowiedz

169

Po dodaniu efektów do pliku append nie będzie działać, ponieważ treść wyświetlana w przeglądarce jest aktualizowana natychmiast po dodaniu elementu div. Tak więc, aby połączyć odpowiedzi Mark B i Steerpike'a:

Oznacz div, który dodajesz jako ukryty, zanim go dodasz. Można to zrobić z wbudowanych lub zewnętrznych skryptu CSS, lub po prostu tworzyć div jako

<div id="new_div" style="display: none;"> ... </div> 

Następnie możesz efekty łańcuch swojej append (demo):

$('#new_div').appendTo('#original_div').show('slow'); 

Albo (demo):

var $new = $('#new_div'); 
$('#original_div').append($new); 
$new.show('slow'); 
+5

był prawdopodobnie stylem inline, dodając klasę css, taką jak "hidden", która oznacza wyświetlanie: none is .. "classier" (baddoom tsh);) – dmp

+29

@danp: http://www.sadtrombone.com –

+2

To wygrał ' t działa. Gdy użyjesz append, zwróci oryginalny_div, a nie nowo dodany element. Więc w rzeczywistości dzwonisz do show na kontenerze. – Vic

4

Ustaw dołączony div jako początkowo ukryty przez css visibility:hidden.

12

Coś jak:

$('#test').append('<div id="newdiv">Hello</div>').hide().show('slow'); 

powinien to zrobić?

Edycja: przepraszam, pomyłka w kodzie i wziąłem też sugestię Matta na pokładzie.

+1

Nie jestem pewien, czy zrobiłoby to, co chce, ale jeśli tak, to połączysz funkcje: '$ ('# divid') .endend ('# newdiv'). Hide(). Show ('slow') '. –

+0

To działa; bit #newdiv jest błędny i masz rację, możesz je połączyć. Edytowałem teraz swoją odpowiedź. –

+0

To jest najprostsze podejście. Działa dobrze. – Cybernetic

107

istotą jest to:

  1. Dzwonisz 'append' na rodzica
  2. ale chcesz zadzwonić 'show' na nowym dzieckiem

Działa to dla mnie:

var new_item = $('<p>hello</p>').hide(); 
parent.append(new_item); 
new_item.show('normal'); 

czyli

$('<p>hello</p>').hide().appendTo(parent).show('normal'); 
+1

Mam świadomość, że ma teraz 3,5 roku, ale jest to taka łatwa odpowiedź. Musiałem tylko głosować i komentować. Dobra robota! – hannebaumsaway

+1

Próbowałem oba te sposoby i nie działa. Nie ma płynnego efektu ślizgowego na dołączanych treściach. – Chris22

+0

''normal'' nie jest prawidłowym ciągiem dla prędkości. zostaw to puste, aby nie było żadnego przejścia (pojawia się natychmiast). użyj ciągu '' fast'' dla 200ms lub ''slow'' dla 600ms. lub wpisz dowolną liczbę, taką jak '$ (" element "). show (747)' (= 747ms), aby zdefiniować własną prędkość. zobacz [docs] (https://api.jquery.com/show/) i poszukaj animacji/czasu trwania. – honk31

18

Innym sposobem pracy z danymi przychodzącymi (np. Z połączenia ajax):

var new_div = $(data).hide(); 
$('#old_div').append(new_div); 
new_div.slideDown(); 
3

byłem w potrzebie podobnego rodzaju rozwiązania, chciał dodać dane na ścianie jak Facebook, kiedy pisał, użyj prepend() dodać ostatni post na górze, że może być przydatny dla innych ..

$("#statusupdate").submit(function() {  
      $.post(
      'ajax.php', 
      $(this).serialize(), 
      function(data){ 

       $("#box").prepend($(data).fadeIn('slow'));     
       $("#status").val(''); 
      } 
     ); 
      event.preventDefault(); 
     }); 

kod w ajax.PHP jest

if (isset($_POST)) 
{ 

    $feed = $_POST['feed']; 
    echo "<p id=\"result\" style=\"width:200px;height:50px;background-color:lightgray;display:none;\">$feed</p>"; 


} 
1

Dlaczego nie można po prostu ukryć, dołączyć, a następnie pokazać, jak to:

<div id="parent1" style=" width: 300px; height: 300px; background-color: yellow;"> 
    <div id="child" style=" width: 100px; height: 100px; background-color: red;"></div> 
</div> 


<div id="parent2" style=" width: 300px; height: 300px; background-color: green;"> 
</div> 

<input id="mybutton" type="button" value="move"> 

<script> 
    $("#mybutton").click(function(){ 
     $('#child').hide(1000, function(){ 
      $('#parent2').append($('#child')); 
      $('#child').show(1000); 
     }); 

    }); 
</script> 
7

Po dołączeniu do div, ukryć i pokazać to z argument "slow".

$("#img_container").append(first_div).hide().show('slow'); 
0

Można wyświetlać płynnie, jeśli korzystasz z animacji. W stylu wystarczy dodać "animacja: pokaż 1" i cały wygląd opisać w klatkach kluczowych.

0

W moim przypadku:

$("div.which-stores-content").append("<div class="content">Content</div>); 
$("div.content").hide().show("fast"); 

można dostosować css z visibility: hidden -> widoczność: widoczne i dostosować przejścia itp przejście: widoczność 1.0s;

Powiązane problemy