Sự cố của bạn có vẻ là bạn chỉ thay đổi màu nền của các thành phần mà đã được cuộn vào chế độ xem. Mã của bạn hy vọng rằng trình duyệt chờ mã của bạn xử lý sự kiện cuộn trước khi trình duyệt vẽ lại chế độ xem của nó. Đây có lẽ không phải là sự đảm bảo được đưa ra bởi thông số HTML. Đó là lý do tại sao nó nhấp nháy.
Điều bạn nên làm thay vào đó là thay đổi các thành phần mà sẽ được cuộn vào chế độ xem. Điều này liên quan đến việc hiển thị tắt màn hình hoặc đệm đôi vì nó được gọi trong lập trình trò chơi trên máy tính. Bạn xây dựng cảnh của bạn khỏi màn hình và sao chép cảnh hoàn thành vào bộ đệm khung có thể nhìn thấy.
Tôi đã sửa đổi JSFiddle đầu tiên của bạn để bao gồm một số nhân cho chiều cao của vùng cuộn: http://jsfiddle.net/2YeZG/13/.
dad.bind('scroll', function() {
// new: query multiplier from input field (for demonstration only) and print message
var multiplier = +($("#multiplier")[0].value);
$("#message")[0].innerHTML=(multiplier*100)-100 + "% of screen rendering";
// your original code
var newScrollY = newScrollY = dad.scrollTop();
var isForward = newScrollY > oldScrollY;
var minVal = bSearch(bots, newScrollY, true);
// new: expand covered height by the given multiplier
// multiplier = 1 is similar to your code
// multiplier = 2 would be complete off screen rendering
var newScrollYHt = newScrollY + multiplier * dadHeight;
// your original code (continued)
var maxVal;
for (maxVal = minVal; maxVal < botsLen; maxVal++) {
var nxtTopSide = tops[maxVal];
if (nxtTopSide >= newScrollYHt) {
break;
}
}
maxVal = Math.min(maxVal, botsLen);
$(dadKids.slice(minVal, maxVal)).css('background', 'pink');
});
Mã của bạn có hệ số 1, có nghĩa là bạn cập nhật các phần tử hiện có thể nhìn thấy (100% chiều cao vùng cuộn). Nếu bạn đặt hệ số thành 2, bạn sẽ hoàn thành việc cập nhật màn hình cho tất cả các phần tử của mình. Trình duyệt cập nhật đủ các phần tử cho màu nền mới để thậm chí một cuộn 100% sẽ hiển thị các phần tử được cập nhật. Vì trình duyệt hiếm khi cuộn 100% diện tích trong một bước (phụ thuộc vào hệ điều hành và phương thức cuộn!), Có thể đủ để giảm hệ số nhân, ví dụ: 1,5 (nghĩa là 50% tắt hiển thị màn hình). Trên máy tính của tôi (Google Chrome, Mac OS X có bàn phím cảm ứng), tôi không thể tạo bất kỳ nhấp nháy nào nếu hệ số nhân 1.7 trở lên.
BTW: Nếu bạn làm điều gì đó phức tạp hơn là chỉ thay đổi màu nền, bạn không nên lặp lại điều này. Thay vào đó, bạn nên kiểm tra xem phần tử đã được cập nhật và chỉ thực hiện thay đổi sau đó.
không nhấp nháy cho tôi (FF 16) – RASG
nó chắc chắn nhấp nháy trong chrome, điều này có thể là vấn đề triển khai trình duyệt ... ngay cả trong bản giới thiệu trên trang bạn đã liên kết, bạn thấy một số nhấp nháy ngay cả trên trang được tối ưu hóa của họ. –
flickers cho tôi trong chrome, nhưng nếu tôi kéo thực sự chậm họ tất cả thay đổi như mong đợi, dường như chỉ cần bỏ qua một số yếu tố nếu bạn di chuyển nhanh. – Neil