JQuery с помощью добавления с эффектами

144

Как я могу использовать .append()с такими эффектами, какshow('slow')

appendКажется, что воздействие на не работает вообще, и дает тот же результат, что и обычно show(). Нет переходов, нет анимации.

Как я могу добавить один DIV в другой, и иметь slideDownили show('slow')влияние на него?

Дэвид Кинг
источник

Ответы:

195

Влияние на добавление не будет работать, потому что содержимое, отображаемое в браузере, обновляется сразу после добавления div. Итак, чтобы объединить ответы Марка Б и Стирпайка:

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

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

Затем вы можете связать эффекты для своего приложения ( демо ):

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

Или ( демо ):

var $new = $('#new_div');
$('#original_div').append($new);
$new.show('slow');
Мэтт Болл
источник
5
Вероятно, это был встроенный стиль, добавив класс CSS, такой как «скрытый», который приравнивается к отображению: ни один не является .. «classier» (baddoom tsh);)
dmp
2
Это не сработает. Когда вы используете append, он вернет original_div, а не добавленный элемент. Итак, вы на самом деле вызываете шоу на контейнере.
Вик
1
@Vic, как это происходит .append(), даже не берет строку селектора. Идея все еще верна. Спасибо, обновлено.
Мэтт Болл
Демонстрация работает отлично, но предполагает, что контент существует - поэтому он не будет работать, если вы генерируете контент, например. вытащить альт-контент изображения, чтобы создать заголовок или
раздел
124

Суть такова:

  1. Вы называете «добавить» на родителя
  2. но вы хотите позвонить "показать" на нового ребенка

Это работает для меня:

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

или:

$('<p>hello</p>').hide().appendTo(parent).show('normal');
Дерек Илчук
источник
2
Я пробовал оба эти способа, и это не работает. На добавляемом контенте нет эффекта плавного скольжения.
Chris22
'normal'не правильная строка для скорости. оставьте это поле пустым для перехода (сразу появляется). используйте строку для 200 'fast'мс или 'slow'для 600 мс. или введите любое число, например $("element").show(747)(= 747 мс), чтобы определить собственную скорость. посмотрите документы и посмотрите анимацию / продолжительность.
Honk31
2
С эффектом слайда: element.slideUp("slow", function(){ element.appendTo(parent).hide(); element.slideDown(); });
Кевин Грабхер,
Мне нравится держать часть шаблона вне шаблона
lilalinux
23

Другой способ при работе с входящими данными (например, при вызове ajax):

var new_div = $(data).hide();
$('#old_div').append(new_div);
new_div.slideDown();
naspinski
источник
15

Что-то вроде:

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

должен это сделать?

Изменить: извините, ошибка в коде и принял предложение Мэтта на борту тоже.

Марк Белл
источник
1
Не уверен , если это будет делать то , что он хочет, но если это так, то вы бы цепочку функций: $('#divid').append('#newdiv').hide().show('slow').
Мэтт Болл
Это работает; бит #newdiv неверен, и вы правы, вы можете связать их. Я отредактировал свой ответ сейчас.
Марк Белл
8

Когда вы добавляете в div, скройте его и покажите с аргументом "slow".

$("#img_container").append(first_div).hide().show('slow');
Шубхам Хатри
источник
Событие скрытия и показа применяется к #img_container, а не к first_div, вы должны использовать appendTo
JesuLopez
4

Установите добавленный div, чтобы он был изначально скрыт через css visibility:hidden.

Стирпайк
источник
3

Мне нужно было решение подобного рода, я хотел добавить данные на стене, такие как Facebook, когда они будут опубликованы, используйте prepend()для добавления последних сообщений сверху, думал, что это может быть полезно для других ..

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

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

код в 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

Почему бы вам просто не спрятаться, не добавить, не показать, как это:

<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

Можно показать сглаживание, если вы используете анимацию. В стиле просто добавьте «animation: show 1s», и весь внешний вид описывается в ключевых кадрах.

NeedHate
источник
0

В моем случае:

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

Вы можете настроить свой CSS с видимостью: скрытый -> видимость: видимый и настроить переходы и т. д. переход: видимость 1,0 с;

Бампер
источник