ScrollIntoView có hoạt động trên tất cả các trình duyệt không?


82

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 jQuerypháp thay thế?

Câu trả lời:


81

Nó được hỗ trợ là có, nhưng trải nghiệm người dùng thì ... tệ.

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:

  • trang đã được cuộn lên
  • trang đã được cuộn xuống
  • họ đã được chuyển hướng đến nơi khác

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.

scrollintoviewPlugin 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.


1
Lưu ý: Plugin jQuery không hoạt động (bên phải) nếu phần tử cuộn nằm trong iframe (vì những lý do rõ ràng). element.scrollIntoView không hoạt động ngay cả sau đó.
panzi

7
thông số kỹ thuật mới với ScrollIntoViewOptionscho 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 ...
bay cừu

6
Firefox dường như hỗ trợ behavior: "smooth", nhưng không hỗ trợ Chrome hoặc Safari.
Flimm

1
Nó hữu ích cho những việc như tạo menu thả xuống tùy chỉnh nơi các phím mũi tên điều khiển lên / xuống và tùy thuộc vào mục đã chọn mà menu sẽ cuộn. Sẽ là một trải nghiệm người dùng tồi nếu không để nó nhảy ngay lập tức giữa các mục trong trường hợp đó.
user2867288

1
@Flimm không có trong IE / Edge. Xem tham khảo , chỉ FF36 + có tính năng này. Vì vậy, nó vô ích, không thoải mái.
Alex Zhukovskiy


3

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); 

2
liên kết của bạn đến iScroll-4 đã chết
Romain Vincent

1

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:

  1. Lưu vào bộ nhớ cache vị trí cuộn hiện tại của vùng chứa dưới dạng START POSITION
  2. chạy được xây dựng trong scrollIntoView
  3. Lưu vào bộ nhớ cache vị trí cuộn lại là VỊ TRÍ KẾT THÚC
  4. Trả vùng chứa trở lại START POSITION
  5. Tạo hoạt ảnh cuộn đến END POSITION

1

vui lòng đọc về scrollIntoViewIfNeeded

if(el.scrollIntoViewIfNeeded){
el.scrollIntoViewIfNeeded()
}else{
el.scrollIntoView()
}

0

Bạn có thể sử dụng jQuery thay thế và hoạt ảnh <html><body>các phần tử:

$('html, body').animate({
  scrollTop: $("#myElem").offset().top
}, 1000);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.