Giả sử tôi có một số div và tôi sử dụng .animate({opacity:0},400, function(){});
cho con của nó. Sau đó, bạn có thể nhận được thời gian còn lại cho hoạt ảnh hoàn thành không? ví dụ: 200 ms còn lại hoặc 0 nếu không có hoạt ảnh? Cảm ơn.Có cách nào để có thời gian hoạt ảnh còn lại không?
Trả lời
Để giúp bạn hiểu rõ hơn về cách bạn có thể sử dụng step
chức năng [như được đăng bởi gdoron]
Tôi tạo ra một ví dụ bằng cách sử dụng bước chức năng để có được thời gian còn lại:
(nhấp vào nút get state!
để dừng hoạt ảnh và truy xuất thời gian còn lại!)
demo with distance
demo with opacity
cách dụ jQuery:
var time = 4000;
var distance = 300;
var currentTime = 0;
$('#ball').animate({
left: distance
}, {
duration: time,
step: function (now, fx) {
currentTime = Math.round((now * time)/distance);
var data = fx.prop + ' ' + Math.round(now) + '; <b>' + currentTime + 'ms</b> ';
$('body').append('<p>' + data + '</p>');
},
easing: 'linear'
});
$('#getTime').click(function() {
$('#ball').stop();
$('body').prepend('<p>currentTime is:' + currentTime + ' ms; REMAINING: ' + (time - currentTime) + 'ms</p>');
});
- Bạn có thể xem như thế nào tôi đã sử dụng
fx.prop
bên tronganimation step
để có được (left
) bất động sản hiện đang hoạt hình. - Bạn có thể xem cách: biết thời gian hoạt ảnh và khoảng cách (độ mờ, bất kỳ ...) chúng tôi có thể dễ dàng truy xuất trạng thái 'đã dừng/tạm dừng' bằng một số phép toán đơn giản (
(now*time)/distance
) và nhờ giá trị trả vềnow
.
Cảm ơn điều này là rất hữu ích! Và có vẻ như nó sẽ không ảnh hưởng nhiều đến hiệu năng nếu chúng ta giới hạn chức năng của bước chỉ bằng văn bản thay đổi. Dù sao nó sẽ không được gọi mỗi 1 ms hay gì đó. – Anonymous
@ user1125062 Không nên, vì chúng tôi chỉ truy cập vào nội dung nào đó đang chạy hoạt ảnh của chúng tôi. –
Tôi không có ý tưởng tại sao bạn cần nó, nhưng step
có thể giúp bạn trích xuất giá trị này:
Bước Chức năng
Phiên bản thứ hai của .animate() cung cấp một lựa chọn bước - một chức năng gọi lại được kích hoạt tại mỗi bước của hoạt ảnh. Chức năng này rất hữu ích cho việc bật các loại hoạt hình tùy chỉnh hoặc thay đổi hoạt ảnh khi nó đang diễn ra. Nó chấp nhận hai đối số (bây giờ và fx), và điều này được đặt thành phần tử DOM đang được làm động.
tại: giá trị số tài sản được hoạt hình ở mỗi bước
fx: một tham chiếu đến đối tượng nguyên mẫu jQuery.fx, trong đó có một số tài sản như elem cho các phần tử hoạt hình, bắt đầu và kết thúc cho giá trị đầu tiên và cuối cùng của thuộc tính động, tương ứng và chống cho thuộc tính đang được làm động.
hmmm, nhưng tôi phải làm gì với điều đó? :) – Anonymous
@ user1125062. Bạn có thể lấy giá trị hiện tại, giá trị đầu tiên, giá trị cuối cùng v.v., chỉ cần chơi với nó. Dù sao tôi chắc chắn rằng có những cách khác để làm những gì bạn đang cố gắng để làm ... – gdoron
Nếu không có một setInterval hoặc phương pháp này, không, AFAIK. Đây là những cách duy nhất để có được nó. – inhan
Nghe, đừng bận tâm đến chức năng step
mà mọi người tiếp tục nói đến. Tôi đã từng cần những gì bạn làm và viết của riêng tôi mà chỉ cần đặt nó ngược thiết kế thời gian còn lại bằng cách xem tổng thời gian hoạt hình (nên đã được biết đến bạn kể từ khi bạn đã đưa số này cho jQuery) và thương của Opacity hiện tại và mục tiêu. Sau đó, chỉ nhân thương số đó với tổng thời gian hoạt ảnh, có tổng trừ đi tổng thời gian. Đơn giản như thế.
Pseudo-code:
func calculate-time-left-in-a-running-fade-in-animation:
{
var current_opacity = $elem.css('opacity');
var target_opacity = this.getTargetOpacity();
var total = this.getTotalAnimationTime();
var quotient = current_opacity/target_opacity;
return total - quotient * total;
}
Cách tiếp cận thú vị, mặc dù không phải của nó! Mặc dù nếu độ chính xác là quan trọng, bước là cách duy nhất để đi. – Anonymous
Tự lấy giá trị thuộc tính hoặc sử dụng biến số hiện tại là điều tương tự, miễn là hoạt ảnh bị tạm dừng. Trong ví dụ về bước jQuery mà @roXon đưa ra, sẽ có rất nhiều chi phí đang diễn ra, ở mỗi bước của hoạt ảnh. Thậm chí có thể giới thiệu các biến toàn cục như ví dụ thực sự đã làm. Nếu bạn có ý định tạm dừng hoạt ảnh trước khi tính toán (giống như ví dụ đã làm) và lập trình tiếp tục hoạt ảnh sau đó, thì hoàn toàn không có sự khác biệt nào cả. Tôi thậm chí còn nói rằng nhận được giá trị tính toán này dưới một hình ảnh động chạy sẽ tạo ra kết quả tương tự. –
Sản phẩm được lưu trữ của logic bước, giá trị được tính của thời gian còn lại, không giống như danh sách trực tiếp, giá trị không tự cập nhật lên giá trị chính xác tối đa. Và nó sẽ không là gì ngoài tính toán "cũ" bạn sử dụng bất cứ khi nào bạn sử dụng nó. Bạn thậm chí sẽ có một người đàn ông trung gian chịu trách nhiệm bắc cầu khoảng cách thông tin này, chức năng bước, những người nên trong lý thuyết ngăn chặn độ chính xác. Nhưng nếu bạn thay vào đó thực hiện cùng một tính toán _exactly khi bạn cần biết_ thời gian còn lại, thậm chí sẽ không chính xác hơn? Và rẻ hơn nữa, cả về khả năng đọc mã và chi phí xử lý. –
- 1. Hoạt ảnh CSS có hoạt động đúng thời gian không?
- 2. Thời gian còn lại của QTimer
- 3. Có cách nào để tạm dừng Hoạt ảnh chính và tiếp tục lại sau một thời gian không?
- 4. Thời gian ước tính còn lại, tôi còn thiếu gì?
- 5. div còn lại lấp đầy không gian ngang còn lại?
- 6. Làm thế nào để tránh java.io.IOException này: Không có không gian còn lại trên thiết bị
- 7. có thể lấy thời gian còn lại trên một sự kiện 'glib'?
- 8. Làm cách nào để ước tính thời gian tải xuống còn lại (chính xác)?
- 9. CSS: Hai trường, để lại một chiều rộng linh hoạt, phải có một không gian còn lại
- 10. Có cách nào để làm cho hai hoạt ảnh jQuery chạy (đúng cách) đồng thời không?
- 11. thời gian Ước tính còn lại trong C++ 11
- 12. Có cách nào để tạo lại UUID dựa trên thời gian/nút trong PHP không?
- 13. Thời gian còn lại trên một select() gọi
- 14. Làm thế nào để tìm ra thời gian còn lại của một setTimeout()
- 15. java.io.IOException: Không có không gian còn lại trên thiết bị Android
- 16. Có cách nào để chụp màn hình dưới dạng video theo thời gian thực không?
- 17. Cách đặt khoảng thời gian còn lại cho kết nối HTTP trong WCF
- 18. Geofences Android có còn lại khi khởi động lại không?
- 19. System.Timers.Timer Cách lấy thời gian còn lại cho đến khi Elapse
- 20. LaTeX: Chỉ hiển thị khối nếu có đủ không gian còn lại
- 21. Làm cách nào để loại bỏ "jitter" khỏi tính toán "thời gian còn lại ước tính" (và ETA) của tôi?
- 22. Có cách nào trong Javascript để chỉnh sửa thời gian của trình duyệt không?
- 23. EditText sẽ không lấp đầy không gian còn lại
- 24. Có cách nào để loại bỏ một nút UIalertView không sau một thời gian không?
- 25. Lỗi TF: Không có thay đổi nào còn lại để kiểm tra trong
- 26. HTML CSS Phần còn lại của không gian
- 27. Làm thế nào để lấy văn bản để chiếm 100% không gian còn lại?
- 28. Có cách nào để truy cập Ribbon (XML) tại thời gian chạy không?
- 29. làm cho div lấp đầy không gian còn lại
- 30. Có cách nào để đặt thời gian chờ phản hồi cho Indy Tidhttp không?
Chỉ cần ra khỏi tò mò ... tại sao bạn cần giá trị đó? –
@ RokoC.Buljan. Đó là một sở thích mà tôi đoán. Anh ấy là bộ sưu tập hình ảnh động lần. – gdoron
Tôi gặp vấn đề với việc xếp hàng một số cuộc gọi lại cho trẻ em - nó không phải lúc nào cũng kích hoạt và không dễ xác định xem con nào xếp hàng, vì vậy tôi muốn thử với setTimeout để làm cho nó đáng tin cậy hơn. – Anonymous