Có lệnh gọi lại khi hoàn thành hoạt ảnh CSS3 không?


92

Có cách nào để triển khai hàm gọi lại trong trường hợp hoạt ảnh css3 không? Trong trường hợp hoạt ảnh Javascript có thể xảy ra nhưng không tìm thấy bất kỳ cách nào để làm điều đó trong css3.

Một cách tôi có thể thấy là thực hiện gọi lại sau thời lượng hoạt ảnh nhưng điều đó không đảm bảo rằng nó sẽ luôn được gọi ngay sau khi hoạt ảnh kết thúc. Nó sẽ phụ thuộc vào hàng đợi giao diện người dùng của trình duyệt. Tôi muốn một phương pháp mạnh mẽ hơn. Có manh mối nào không?



nếu bạn muốn thực hiện hành động CSS đơn giản, chẳng hạn như ẩn phần tử sau khi chuyển đổi, có thể bạn không cần gọi lại và thay vào đó, bạn có thể giải quyết vấn đề của mình với khung hình chính của hoạt ảnh.
Madmadi

Câu trả lời:


131

Có, có. Cuộc gọi lại là một sự kiện, vì vậy bạn phải thêm một bộ nghe sự kiện để bắt nó. Đây là một ví dụ với jQuery:

$("#sun").bind('oanimationend animationend webkitAnimationEnd', function() { 
   alert("fin") 
});

Hoặc js thuần túy:

element.addEventListener("webkitAnimationEnd", callfunction,false);
element.addEventListener("animationend", callfunction,false);
element.addEventListener("oanimationend", callfunction,false);

Bản demo trực tiếp: http://jsfiddle.net/W3y7h/


3
Đối với IE10, đó là 'MSAnimationEnd' (xem msdn.microsoft.com/en-us/ie/hh272902#_CSSAnimations )
Martin Wittemann

6
transitionend, không phải animationend.

13
@MichaelJones không, đó là cho quá trình chuyển đổi css3. câu hỏi là về hình ảnh động.
joshvermaire

4
@MartinWittemann IE10 cuối cùng hiện sử dụng animationend msdn.microsoft.com/en-us/library/ie/… . @Husky mã làm việc trong Chrome và FF 14, xem cập nhật fiddle jsfiddle.net/W3y7h
methodofaction

1
Bản sao của stackoverflow.com/questions/9255279/... trong đó có một giải pháp hoàn chỉnh hơn
vanthome

3

Một cách dễ dàng để bạn thực hiện một cuộc gọi lại cũng xử lý các chuyển đổi CSS3 / khả năng tương thích của trình duyệt sẽ là Plugin jQuery Transit . Thí dụ:

//Pulsing, moving element
$("#element").click( function () {
    $('#element').transition({ opacity: 0, x: '75%' }, function () { $(this).transition({ opacity: 1, x: '0%' }).trigger("click"); });
});

JS Fiddle Demo


1
Điểm cộng cho việc nó chia sẻ thông số kỹ thuật API với hoạt ảnh jQuery, nhưng vẫn tận dụng được độ mượt mà của hoạt ảnh CSS được kết xuất bằng phần cứng. Chúng tôi vừa thay thế hoạt ảnh jQuery khá nhiều ở mọi nơi bằng điều này.
logan
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.