2012-01-18 49 views
5

Câu hỏi này liên quan đến thị sai ít hơn so với di chuyển sự kiện. Mối quan tâm trọng tâm của tôi với dự án của tôi là hiệu ứng cuộn thị sai là trơn tru và không hốt hoảng.Hiệu suất của jQuery Parallax/Scroll Hiệu suất

Câu hỏi của tôi là, làm một số thuộc tính animate/cuộn tốt hơn các thuộc tính khác? Ví dụ: vị trí nền hoạt động tốt hơn nói điều chỉnh lề trên đầu trang khi cuộn.

Trả lời

11

Tôi không chắc chắn nếu một số thuộc tính tạo ra ít chi phí hơn trong khi hoạt hình hơn những người khác nhưng Tôi sẽ rất quan tâm nếu ai đó đăng một số thông tin tốt về chủ đề đó. Điều đó đang được nói rằng tôi biết một vài điều có thể giúp thực hiện.

Đặt position : absolute xóa phần tử khỏi luồng thông thường của trang và do đó không yêu cầu toàn bộ trang được vẽ lại khi được làm động. position : relative sẽ buộc vẽ lại toàn bộ trang vì tổ tiên và phần tử con cháu có thể bị ảnh hưởng.

Ngoài ra, bạn có thể điều tiết sự kiện scroll và vẫn đạt được tốc độ 30fps:

var scroll_ok = true; 
setInterval(function() { 
    scroll_ok = true; 
}, 33);//33ms is 30fps, you can try changing this to something larger for better performance 
$(window).bind('scroll', function() { 
    if (scroll_ok === true) { 
     scroll_ok = false; 
     //now run your code to animate with respect to scroll 
    } 
}); 

CẬP NHẬT :: 2014-08-26

Mọi thứ đã thay đổi kể từ này ban đầu được viết. Một vài lưu ý nhanh chóng:

  • Trình duyệt hiện tại cố gắng GPU tăng tốc bức tranh của các yếu tố được đưa ra một tập hợp cụ thể của tài sản (opacitytransform ra khỏi đỉnh đầu của tôi). Việc sử dụng các thuộc tính này có thể cải thiện hiệu suất cho những người khác như top/left (cũng yêu cầu vẽ lại trang trong nhiều trường hợp hơn là sử dụng transform).

  • will-change là thuộc tính mới vừa được trình duyệt chọn. Về cơ bản, bạn có thể thiết lập một danh sách các thuộc tính có khả năng thay đổi để trình duyệt có thể tối ưu hóa thay đổi thuộc tính trước thời hạn.

  • requestAnimationFrame có khả năng hỗ trợ trình duyệt hiện đại và tốt. Đây là một cách tốt hơn để làm mượt mà các yếu tố không tạo ra hàng tấn "chunk" khi trình duyệt sẽ hiển thị khi có thể.

+1

Ahhh, Cảm ơn bạn! Tôi chắc chắn sẽ sử dụng điều chỉnh cuộn. Có thể chơi xung quanh với các giá trị để xem những gì hoạt động tốt nhất cho dự án này. Một mẹo khác, mặc dù nó được biết đến rộng rãi hiện nay, là sử dụng plugin "inview", do đó hạn chế nghiêm trọng số lượng các phần tử đang hoạt ảnh tại bất kỳ điểm nào đã cho. –

+3

Tôi đã tạo một plugin jQuery làm động các phần tử trong các tham số nhất định. Trình xử lý sự kiện 'scroll' kiểm tra xem liệu' viewport' có nằm ở vị trí thích hợp để tạo hiệu ứng cho một phần tử hay không, nếu nó được làm động, nếu không thì không. Thật dễ dàng như kiểm tra xem vị trí cuộn hiện tại có nằm trong phạm vi được đặt cho một phần tử hay không. – Jasper