jQuery sử dụng chắp thêm hiệu ứng


144

Làm thế nào tôi có thể sử dụng .append()với các hiệu ứng nhưshow('slow')

Có tác dụng đối với appenddường như không hoạt động, và nó cho kết quả tương tự như bình thường show(). Không chuyển tiếp, không hình ảnh động.

Làm thế nào tôi có thể gắn một div khác, và có một slideDownhoặc show('slow')ảnh hưởng đến nó?

Câu trả lời:


195

Có hiệu ứng trên append sẽ không hoạt động vì nội dung trình duyệt hiển thị được cập nhật ngay sau khi div được nối. Vì vậy, để kết hợp câu trả lời của Mark B và Steerpike:

Phong cách div bạn đang nối như ẩn trước khi bạn thực sự nối nó. Bạn có thể làm điều đó với tập lệnh CSS nội tuyến hoặc bên ngoài hoặc chỉ cần tạo div như

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

Sau đó, bạn có thể xâu chuỗi các hiệu ứng để nối thêm ( bản demo ):

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

Hoặc ( bản demo ):

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

5
có lẽ là kiểu nội tuyến, thêm một lớp css như "hidden" tương đương với hiển thị: none is .. "classier" (baddoom tsh);)
dmp

2
Điều này sẽ không làm việc. Khi bạn sử dụng chắp thêm, nó sẽ trả về gốc_div không phải là phần tử mới được nối thêm. Vì vậy, bạn đang thực sự gọi chương trình trên container.
Vic

1
@Vic vì nó xảy ra .append()thậm chí không có chuỗi chọn. Ý tưởng vẫn đúng. Cảm ơn, cập nhật.
Matt Ball

Bản demo hoạt động hoàn hảo, nhưng nó giả sử nội dung tồn tại - vì vậy nó sẽ không hoạt động nếu bạn đang tạo nội dung, ví dụ. kéo nội dung thay thế của hình ảnh để tạo tiêu đề hoặc div ...
Drew Dello Stritto

124

Bản chất là đây:

  1. Bạn đang gọi 'phụ lục' vào phụ huynh
  2. nhưng bạn muốn gọi 'chương trình' cho đứa trẻ mới

Điều này làm việc cho tôi:

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

hoặc là:

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

2
Tôi đã thử cả hai cách này và nó không hoạt động. Không có hiệu ứng trượt trơn tru trên nội dung được nối thêm.
Chris22

'normal'không phải là một chuỗi thích hợp cho tốc độ. để trống để không chuyển tiếp (hiển thị ngay lập tức). sử dụng chuỗi 'fast'trong 200ms hoặc 'slow'600ms. hoặc nhập bất kỳ số nào như $("element").show(747)(= 747ms) để xác định tốc độ riêng. xem các tài liệu và tìm kiếm hình ảnh động / thời lượng.
honk31

2
Với hiệu ứng trượt: element.slideUp("slow", function(){ element.appendTo(parent).hide(); element.slideDown(); });
Kevin Grabher

Tôi thích giữ phần ẩn khỏi mẫu
lilalinux

23

Một cách khác khi làm việc với dữ liệu đến (như từ cuộc gọi ajax):

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

15

Cái gì đó như:

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

Hãy làm nó?

Chỉnh sửa: xin lỗi, nhầm mã và đưa đề xuất của Matt lên máy bay.


1
Không chắc chắn nếu điều đó sẽ làm những gì anh ta muốn, nhưng nếu vậy, bạn sẽ xâu chuỗi các chức năng : $('#divid').append('#newdiv').hide().show('slow').
Matt Ball

Nó không hoạt động; bit #newdiv là sai mặc dù và bạn đúng, bạn có thể xâu chuỗi chúng. Tôi đã chỉnh sửa câu trả lời của tôi bây giờ.
Đánh dấu Bell

8

Khi bạn nối vào div, ẩn nóhiển thị nó với đối số "slow".

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

Sự kiện ẩn và hiển thị áp dụng cho #img_container chứ không phải trên First_div, bạn nên sử dụng appendTo
JesuLopez

4

Đặt div được nối thêm để được ẩn ban đầu thông qua css visibility:hidden.


3

Tôi đang cần một loại giải pháp tương tự, muốn thêm dữ liệu trên tường như facebook, khi được đăng, sử dụng prepend()để thêm bài đăng mới nhất lên đầu, nghĩ rằng có thể hữu ích cho người khác ..

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

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

mã trong ajax.php là

if (isset($_POST))
{

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


}

1

Tại sao bạn không đơn giản ẩn, nối, sau đó hiển thị, như thế này:

<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

Có thể hiển thị mượt mà nếu bạn sử dụng Animation. Trong phong cách, chỉ cần thêm "hình động: hiển thị 1s" và toàn bộ diện mạo xuất hiện trong khung hình chính.


0

Trong trường hợp của tôi:

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

bạn có thể điều chỉnh css của mình với khả năng hiển thị: ẩn -> khả năng hiển thị: hiển thị và điều chỉnh các hiệu ứng chuyển tiếp, v.v.: tầm nhìn 1.0s;

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.