Có scrollIntoView()
hoạt động trên tất cả các trình duyệt không? Nếu không có một giải jQuery
pháp thay thế?
Câu trả lời:
Như @ 9bits đã chỉ ra, điều này từ lâu đã được tất cả các trình duyệt chính hỗ trợ . Không phải lo lắng về điều đó. Vấn đề chính là cách nó hoạt động. Nó chỉ đơn giản là chuyển đến một phần tử cụ thể cũng có thể nằm ở cuối trang. Bằng cách chuyển đến nó, người dùng không biết liệu:
Hai đầu tiên có thể được xác định bằng vị trí cuộn, nhưng ai nói rằng người dùng đã theo dõi vị trí cuộn trước khi thực hiện bước nhảy? Vì vậy, đó là một hành động không xác định.
Điều cuối cùng có thể đúng, đặc biệt nếu trang có tiêu đề chuyển động bị cuộn ra khỏi chế độ xem và thiết kế trang còn lại không ngụ ý bất kỳ điều gì về việc ở trên cùng một trang (nếu nó cũng không có bất kỳ phần tử chiều dọc tổng chiều cao nào như menu bên trái quán ba). Bạn sẽ ngạc nhiên khi có bao nhiêu trang có vấn đề này. chỉ cần tự mình kiểm tra chúng. Đi tới một số trang, xem nó ở trên cùng, sau đó nhấnEnd phím và xem lại nó. Có khả năng bạn sẽ nghĩ đó là một trang khác.
scrollintoview
Plugin jQuery hoạt hình để giải cứuĐó là lý do tại sao vẫn có các plugin thực hiện cuộn vào chế độ xem thay vì sử dụng chức năng DOM gốc. Chúng thường tạo hoạt ảnh cuộn để loại bỏ tất cả 3 vấn đề được nêu ở trên. Người dùng có thể dễ dàng theo dõi các chuyển động.
ScrollIntoViewOptions
cho phép chỉ định behavior: 'smooth'
. không may không có cách nào để dễ dàng phát hiện nếu tùy chọn này được hỗ trợ trong một trình duyệt ...
behavior: "smooth"
, nhưng không hỗ trợ Chrome hoặc Safari.
Có vẻ như nó có: http://www.quirksmode.org/dom/w3c_cssom.html
Tôi sử dụng iScroll-4 của Matteo Spinnelli và nó cũng hoạt động trong iOS safari. Nó có ba phương thức scrollTo, scrollToElement và scrollToPage. Giả sử bạn có một danh sách các phần tử không có thứ tự được bao bọc bên trong một div. Như Robert Koritnik đã viết ở trên, bạn cần có hoạt ảnh nhẹ đó để cho thấy rằng bạn đã cuộn. Phương pháp dưới đây đạt được hiệu quả đó.
scrollToElement(element, time);
Chưa thử điều này, nhưng có vẻ như cõng trên chức năng scrollIntoView tích hợp sẽ tiết kiệm được nhiều mã. Đây là những gì tôi sẽ làm nếu bạn muốn hành động hoạt hình: