2012-10-02 36 views
6

Có vẻ như nếu tôi đang cuộn window, thì window.setInterval không được đính kèm/kích hoạt trong khi cuộn đang xảy ra hoặc sau đó. Có ai khác nhìn thấy cùng một vấn đề không?iOS 6 safari, setInterval không bị sa thải

Ý tôi là ...

  • gì có thể được causeing này?
  • Tôi có thể làm gì để sửa lỗi này?
+0

Có thể nó sẽ dừng tất cả các tập lệnh khi cuộn để lưu bộ nhớ và làm cho hoạt ảnh diễn ra nhanh hơn. Chỉ cần đoán thôi. –

+0

@ Derek, không, mọi thứ khác dường như thực thi tốt, đến điểm của dòng ngay trước setInterval. – Johnny

+0

Bạn có thể cung cấp liên kết không? – Geuis

Trả lời

8

iOS tạm dừng hầu hết mọi thứ để phản hồi với người dùng chạm để đảm bảo nó cảm thấy nhạy. Vấn đề setInterval được biết, và có vẻ như không có một workaround.

setInterval pauses in iphone/ipad (mobile Safari) during scrolling

EDIT

Trong "đóng băng" bộ đếm thời gian sẽ không bắt kịp một lần người dùng nhả màn hình. Các sự kiện bị bỏ lỡ không được hoãn lại, nhưng bị mất hoàn toàn (một lỗi).

+0

nó không chỉ tạm dừng nó, nó không cháy ngay cả sau khi di chuyển. Vấn đề tạm dừng là khác nhau, nó xảy ra nếu setInterval được đính kèm trước khi cuộn trang. Trong trường hợp của tôi, nó được đính kèm trong khi cuộn trang. – Johnny

+0

Phải. Trong thời gian "đóng băng", bộ hẹn giờ sẽ không bắt kịp khi người dùng nhả màn hình. Nhưng làm cách nào để sự kiện của bạn được đính kèm * trong * cuộn nếu công cụ JS bị tạm dừng trong thời gian đó? Bạn có chắc chắn nó không chỉ kích hoạt trong khi di chuyển và bị loại bỏ? – jimp

+0

Tôi có cùng một vấn đề. Tôi nhận được sự kiện liên lạc nếu người dùng cuộn, cho phép đi và sau đó chạm lại. Nhưng setTimeout của tôi bị loại bỏ. Giải pháp hacky xấu xí của tôi là dọn dẹp sau mỗi sự kiện cuộn. (siêu xấu xí!) – Darwin

0

Tôi không hoàn toàn chắc chắn, nhưng bạn có thể sử dụng setTimeout thay vì setInterval? Nó thường là thực tế xấu để sử dụng setInterval anyway.

var delay = 100; 
(function callee() { 
    setTimeout(callee, delay); 
})(); 
+0

Tôi không chắc liệu tôi có đồng ý rằng việc sử dụng 'setInterval' là _generally_ là một thực hành không tốt (nó có thể được sử dụng quá mức, đặc biệt là để vẽ lại nơi requestAnimationFrame phù hợp hơn). Tuy nhiên, một đối số có thể được thực hiện cho 'arguments.callee' là một thực hành không tốt (đó là lý do tại sao nó được [loại bỏ khỏi chế độ nghiêm ngặt] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/ Functions_and_function_scope/Strict_mode? Redirectlocale = vi-US & redirectslug = JavaScript/Strict_mode)). – Strille

+0

Cảm ơn, đã cập nhật mã. – Nathaniel

+1

Sự cố vẫn tiếp diễn với setTimeout – TaylorMac

0

iOS6 Safari bị lỗi mà giết chết giờ được tạo ra khi một trang cuộn.

Có một sửa chữa cho vấn đề này được cung cấp bởi kTmnh bằng cách tái giờ sau khi di chuyển kết thúc

https://gist.github.com/3798925.