Làm thế nào để chạy hai hình động jQuery cùng một lúc?


211

Có thể chạy hai hình động trên hai yếu tố khác nhau cùng một lúc không? Tôi cần ngược lại với câu hỏi này hoạt hình xếp hàng Jquery .

Tôi cần phải làm một cái gì đó như thế này ...

$('#first').animate({ width: 200 }, 200);
$('#second').animate({ width: 600 }, 200);

nhưng để chạy hai cái đó cùng một lúc Điều duy nhất tôi có thể nghĩ là sẽ sử dụng setTimeoutmột lần cho mỗi hoạt hình, nhưng tôi không nghĩ đó là giải pháp tốt nhất.


Erm ... bạn đã thử chưa? Nếu bạn sử dụng mã chính xác mà bạn có ở đó, theo hiểu biết của tôi về cách thức animate()hoạt động, chúng sẽ chạy đồng thời.
hỗn loạn

Ở đây chúng tôi đi - jsbin.com/axata . Thêm / chỉnh sửa để xem mã
Russ Cam

Tôi có một vấn đề thực sự khi hoạt hình các thuộc tính CSS khác nhau. Câu hỏi này có vẻ cũ và tôi đặt nó trong JSFiddle, dường như cả hai cách tiếp cận đều hoạt động. Điều này vẫn còn có liên quan? jsfiddle.net/AVsFe
valk

3
Trong jquery hiện tại và tôi tin rằng từ jQuery 1.4, đoạn mã trên thực hiện đồng thời cả hai, vì hàng đợi fx được gắn vào phần tử mà bạn gọi .animate () chứ không phải hàng đợi toàn cầu.
Chris Moschini

Trên jsbin đã chết. jsfiddle cũng vậy, hoạt động: jsfiddle.net/b9chris/a8pwbhx1
Chris Moschini

Câu trả lời:


418

có, có!

$(function () {
    $("#first").animate({
       width: '200px'
    }, { duration: 200, queue: false });

    $("#second").animate({
       width: '600px'
    }, { duration: 200, queue: false });
});

15
Cảm ơn vì điều này, đã không biết về queuebiến đó !
chấm

4
Tôi có thể hỏi mục đích của việc truyền một hàm cho jQuery là gì không?
pilau

13
@pilau Nó sẽ được thực thi khi tài liệu đã sẵn sàng. Đây là một tốc ký cho $ (tài liệu). Đã (hàm () {}); và cho phép bạn đặt mã javascript trước định nghĩa thành phần của bạn.
Raphael Michel

1
vâng, bạn có thể ăn hàng đợi thành đúng / sai hoặc đặt cho nó một chuỗi (tên hàng đợi) theo cách này, cả hai hình động đều sử dụng cùng một bộ đếm thời gian ...
AlexK

3
Làm thế nào bạn sẽ thêm một onComplete vào đây?
jmchauv

19

Điều đó sẽ chạy đồng thời có. Điều gì nếu bạn muốn chạy hai hình động trên cùng một yếu tố?

$(function () {
    $('#first').animate({ width: '200px' }, 200);
    $('#first').animate({ marginTop: '50px' }, 200);
});

Điều này kết thúc việc xếp hàng các hình ảnh động. để chạy chúng đồng thời, bạn sẽ chỉ sử dụng một dòng.

$(function () {
    $('#first').animate({ width: '200px', marginTop:'50px' }, 200);
});

Có cách nào khác để chạy hai hình ảnh động khác nhau trên cùng một phần tử không?


9

Tôi tin rằng tôi đã tìm thấy giải pháp trong tài liệu jQuery:

Hoạt hình tất cả các đoạn thành kiểu trái 50 và độ mờ là 1 (mờ, có thể nhìn thấy), hoàn thành hoạt ảnh trong vòng 500 mili giây. Nó cũng sẽ làm điều đó bên ngoài hàng đợi, có nghĩa là nó sẽ tự động bắt đầu mà không cần chờ đến lượt .

$( "p" ).animate({
  left: "50px", opacity: 1
}, { duration: 500, queue: false }); 

chỉ cần thêm : queue: false.


1
Làm thế nào để tích hợp chức năng hoàn chỉnh trên cái này? : s
Brainfeeder

8

Nếu bạn chạy như trên, chúng sẽ xuất hiện để chạy đồng thời.

Đây là một số mã kiểm tra:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script>
$(function () {
    $('#first').animate({ width: 200 }, 200);
    $('#second').animate({ width: 600 }, 200);
});
</script>
<div id="first" style="border:1px solid black; height:50px; width:50px"></div>
<div id="second" style="border:1px solid black; height:50px; width:50px"></div>

3

Mặc dù sự thật là các cuộc gọi liên tiếp đến hoạt hình sẽ mang lại vẻ ngoài mà chúng đang chạy cùng một lúc, nhưng sự thật tiềm ẩn là chúng là những hình ảnh động riêng biệt chạy rất gần song song.

Để đảm bảo các hình ảnh động thực sự đang chạy cùng một lúc, sử dụng:

$(function() {
    $('#first').animate({..., queue: 'my-animation'});
    $('#second').animate({..., queue: 'my-animation'}).dequeue('my-animation');
});

Các hình ảnh động khác có thể được thêm vào hàng đợi 'hoạt hình của tôi' và tất cả có thể được bắt đầu với điều kiện là hoạt hình cuối cùng của chúng.

Chúc mừng, Anthony


2

Xem bài đăng blog tuyệt vời này về hoạt hình các giá trị trong các đối tượng .. sau đó bạn có thể sử dụng các giá trị để làm động bất cứ thứ gì bạn thích, đồng thời 100%!

http://www.josscrowcroft.com/2011/code/jquery-animate-increment-decrement-numeric-text-elements-value/

Tôi đã sử dụng nó như thế này để trượt vào / ra:

        slide : function(id, prop, from, to) {
            if (from < to) {
                // Sliding out
                var fromvals = { add: from, subtract: 0 };
                var tovals = { add: to, subtract: 0 };
            } else {
                // Sliding back in
                var fromvals = { add: from, subtract: to };
                var tovals = { add: from, subtract: from };
            }

            $(fromvals).animate(tovals, {
                duration: 200,
                easing: 'swing', // can be anything
                step: function () { // called on every step
                    // Slide using the entire -ms-grid-columns setting
                    $(id).css(prop, (this.add - this.subtract) + 'px 1.5fr 0.3fr 8fr 3fr 5fr 0.5fr');
                }
            });
        }

1
Liên kết chết, tìm thấy nó trở lại tại web.archive.org/web/20150101065437/http://www.josscrowcroft.com/ Kẻ
PhiLho

0

Đăng câu trả lời của tôi để giúp ai đó, câu trả lời được đánh giá cao nhất đã không giải quyết được vấn đề của tôi.

Khi tôi thực hiện như sau [từ câu trả lời trên cùng], hoạt hình cuộn dọc của tôi chỉ bị xáo trộn qua lại:

$(function () {
 $("#first").animate({
   width: '200px'
}, { duration: 200, queue: false });

$("#second").animate({
   width: '600px'
}, { duration: 200, queue: false });
});

Tôi đã đề cập đến: Các trường W3 Đặt Khoảng và nó đã giải quyết vấn đề của tôi, cụ thể là phần 'Cú pháp':

setInterval (hàm, mili giây, param1, param2, ...)

Có các tham số của biểu mẫu của tôi { duration: 200, queue: false }buộc thời lượng bằng 0 và nó chỉ nhìn vào các tham số để được hướng dẫn.

Dài và ngắn, đây là mã của tôi, nếu bạn muốn hiểu lý do tại sao nó hoạt động, hãy đọc liên kết hoặc phân tích các tham số dự kiến ​​khoảng:

var $scrollDiv = '#mytestdiv';
var $scrollSpeed = 1000;
var $interval = 800;

function configureRepeats() {
   window.setInterval(function () {
       autoScroll($scrollDiv, $scrollSpeed);
   }, $interval, { queue: false });
};

Trong đó 'autoScroll' là:

    $($scrollDiv).animate({
        scrollTop: $($scrollDiv).get(0).scrollHeight
    }, { duration: $scrollSpeed });

    //Scroll to top immediately 
    $($scrollDiv).animate({
        scrollTop: 0
    }, 0);

Chúc mừng mã hóa!

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.