Tôi có một setInterval
đoạn mã chạy 30 lần một giây. Điều này hoạt động rất tốt, tuy nhiên khi tôi chọn một tab khác (để tab có mã của tôi không hoạt động), thì setInterval
nó được đặt ở trạng thái không hoạt động vì một số lý do.
Tôi đã thực hiện trường hợp thử nghiệm đơn giản hóa này ( http://jsfiddle.net/7f6DX/3/ ):
var $div = $('div');
var a = 0;
setInterval(function() {
a++;
$div.css("left", a)
}, 1000 / 30);
Nếu bạn chạy mã này và sau đó chuyển sang tab khác, đợi vài giây và quay lại, hoạt ảnh sẽ tiếp tục tại thời điểm đó là khi bạn chuyển sang tab khác. Vì vậy, hình ảnh động không chạy 30 lần một giây trong trường hợp tab không hoạt động. Điều này có thể được xác nhận bằng cách đếm số lần setInterval
hàm được gọi mỗi giây - đây sẽ không phải là 30 mà chỉ là 1 hoặc 2 nếu tab không hoạt động.
Tôi đoán rằng điều này được thực hiện bằng thiết kế để cải thiện hiệu suất, nhưng có cách nào để vô hiệu hóa hành vi này không? Nó thực sự là một bất lợi trong kịch bản của tôi.
Date
. Vì vậy, khi các khoảng thời gian không kích hoạt nhanh (vì lý do này hoặc lý do khác), hoạt hình sẽ bị giật hơn, không chậm hơn.
Date
đối tượng để thực sự thấy thời gian đã trôi qua.