jQuery, використовуючи додавання з ефектами


144

Як я можу використовувати .append()такі ефекти, якshow('slow')

Вплив на вплив append, схоже, не працює, і це дає такий же результат, як і звичайний show(). Ні переходів, ні анімації.

Як я можу додати один div до іншого і мати на нього вплив slideDownчи show('slow')ефект?

Відповіді:


195

Вплив на додавання не працюватиме, оскільки вміст, який відображається у веб-переглядачі, оновлюється, як тільки додається 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
Це не спрацює. Коли ви використовуєте додавання, він поверне original_div не щойно доданий елемент. Отже, ви насправді викликаєте шоу на контейнері.
Вік

1
@Vic, як це відбувається .append(), навіть не приймає рядок вибору. Ідея все ж правильна. Дякую, оновлено.
Метт Бал

Демонстрація працює чудово, але передбачає, що вміст існує - тому він не працюватиме, якщо ви генеруєте вміст, наприклад. потягнувши вміст альту до зображення, щоб створити назву чи розділ ...
Drew Dello Stritto

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'не є належним рядком для швидкості. залиште його порожнім без переходу (відображається негайно). використовувати рядок 'fast'для 200ms або 'slow'600ms. або введіть будь-яке число типу $("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();

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

Можна використовувати плавне зображення, якщо ви використовуєте Анімація. У стилі просто додайте "анімацію: покажіть 1s" і весь зовнішній вигляд описуйте в ключових кадрах.


0

У моєму випадку:

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

ви можете налаштувати свій css з видимістю: приховано -> видимість: видимий та коригування переходів тощо перехід: видимість 1.0s;

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.