jQuery usando append con effetti


144

Come posso usare .append()con effetti comeshow('slow')

Avere effetti su appendnon sembra funzionare affatto e dà lo stesso risultato del normale show(). Nessuna transizione, nessuna animazione.

Come posso aggiungere un div ad un altro, e hanno un slideDowno show('slow')effetto su di esso?

Risposte:


195

Avere effetti su append non funzionerà perché il contenuto visualizzato dal browser viene aggiornato non appena viene aggiunto il div. Quindi, per combinare le risposte di Mark B e Steerpike:

Modella il div che stai aggiungendo come nascosto prima di accodarlo. Puoi farlo con script CSS inline o esterni, o semplicemente creare il div come

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

Quindi puoi concatenare gli effetti alla tua append ( demo ):

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

Oppure ( demo ):

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

5
era probabilmente lo stile inline, aggiungendo una classe CSS come "nascosto" che equivale a visualizzare: nessuno è .. "classier" (baddoom tsh);)
dmp

2
Questo non funzionerà. Quando si utilizza append, verrà restituito l'originale_div non l'elemento appena aggiunto. Quindi in realtà stai chiamando show sul container.
Vic

1
@Vic non succede .append()nemmeno con una stringa di selezione. L'idea è comunque corretta. Grazie, aggiornato
Matt Ball

La demo funziona perfettamente, ma presuppone che il contenuto esista, quindi non funzionerà se si sta generando il contenuto, ad es. estrarre il contenuto
alternativo di

124

L'essenza è questa:

  1. Stai chiamando 'append' sul genitore
  2. ma vuoi chiamare "show" sul nuovo figlio

Questo funziona per me:

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

o:

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

2
Ho provato entrambi questi modi e non funziona. Non vi è alcun effetto scorrevole sul contenuto allegato.
Chris22,

'normal'non è una stringa corretta per la velocità. lascia in bianco per nessuna transizione (si presenta immediatamente). usa una stringa 'fast'per 200ms o 'slow'per 600ms. o digitare un numero qualsiasi come $("element").show(747)(= 747ms) per definire la propria velocità. consulta i documenti e cerca animazione / durata.
honk31,

2
Con effetto slide: element.slideUp("slow", function(){ element.appendTo(parent).hide(); element.slideDown(); });
Kevin Grabher,

Mi piace tenere la parte nascosta fuori dal modello
lilalinux il

23

Un altro modo quando si lavora con i dati in arrivo (come da una chiamata Ajax):

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

15

Qualcosa di simile a:

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

dovrebbe farlo?

Modifica: scusa, sbaglio nel codice e ho accettato anche il suggerimento di Matt.


1
Non sono sicuro se questo sarebbe fare quello che vuole, ma se è così, devi catena delle funzioni: $('#divid').append('#newdiv').hide().show('slow').
Matt Ball,

Funziona; il bit #newdiv è sbagliato e hai ragione, puoi incatenarli. Ho modificato la mia risposta ora.
Mark Bell,

8

Quando ti aggiungi al div, nascondilo e mostralo con l'argomento "slow".

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

L'evento hide and show si applica a #img_container e non al first_div, è necessario utilizzare appendTo
JesuLopez,

4

Imposta inizialmente il div aggiunto da nascondere inizialmente tramite CSS visibility:hidden.


3

Avevo bisogno di un simile tipo di soluzione, volevo aggiungere dati su un muro come Facebook, quando pubblicato, utilizzare prepend()per aggiungere l'ultimo post in alto, pensato potrebbe essere utile per gli altri ..

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

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

il codice in ajax.php è

if (isset($_POST))
{

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


}

1

Perché non semplicemente nascondere, aggiungere, quindi mostrare, in questo modo:

<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>

0

È possibile mostrare senza problemi se si utilizza l'animazione. Con stile basta aggiungere "animazione: mostra 1s" e l'intero aspetto viene descritto nei fotogrammi chiave.


0

Nel mio caso:

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

puoi regolare i tuoi CSS con visibilità: nascosto -> visibilità: visibile e regolare le transizioni ecc. transizione: visibilità 1.0s;

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.