簡體   English   中英

scrollIntoView 是否適用於所有瀏覽器?

[英]Does scrollIntoView work in all browsers?

scrollIntoView()是否適用於所有瀏覽器? 如果沒有,是否有jQuery替代品?

它支持是,但用戶體驗是......糟糕的。

正如@ 9bits所指出的,這一直是所有主流瀏覽器支持的 不用擔心。 主要問題是它的工作方式。 它只是跳轉到一個特定的元素,也可能在頁面的末尾。 通過跳轉到它,用戶不知道是否:

  • 頁面已向上滾動
  • 頁面已向下滾動
  • 他們被重定向到其他地方

前兩個可以通過滾動位置確定,但誰說用戶在跳轉之前跟蹤滾動位置? 所以這是一種不確定的行為。

最后一個可能是真的,特別是如果頁面具有滾動視圖的移動標題並且剩余頁面設計不暗示在同一頁面上的任何內容(如果它也沒有任何總高度垂直元素,如左菜單酒吧)。 有多少頁面有這個問題你會感到驚訝。 親自檢查一下。 轉到某個頁面,在頂部查看,然后按結束鍵再次查看。 您可能會認為這是一個不同的頁面。

動畫scrollintoview jQuery插件來救援

這就是為什么仍然有插件執行滾動到視圖而不是使用本機DOM功能。 它們通常動畫滾動,消除了上面列出的所有3個問題。 用戶可以輕松跟蹤運動。

看起來像這樣: http//www.quirksmode.org/dom/w3c_cssom.html

我使用Matteo Spinnelli的iScroll-4 ,它也適用於iOS Safari。 它有三個方法scrollTo,scrollToElement和scrollToPage。 假設你有一個包含在div中的無序元素列表。 正如羅伯特·科里特尼克(Robert Koritnik)上面所寫,你需要有一個輕微的動畫來表明你已經滾動了。 以下方法實現了這種效果。

scrollToElement(element, time); 

沒試過這個,但似乎捎帶內置的scrollIntoView函數會節省很多代碼。 如果你想要動畫動作,我會怎么做:

  1. 將容器的當前滾動位置緩存為START POSITION
  2. 運行內置在scrollIntoView中
  3. 將滾動位置再次緩存為END POSITION
  4. 將容器返回到START POSITION
  5. 動畫滾動到結束位置

請閱讀有關scrollIntoViewIfNeeded的信息

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

您可以使用jQuery替代和動畫<html><body>元素:

$('html, body').animate({
  scrollTop: $("#myElem").offset().top
}, 1000);

Css 解決了伙計們! 我用#idSelected 選擇了目標ID,並用css“scroll-margin-top”設置了它的樣式,並以rems 定義了我的邊距頂部(使用適合您的任何測量值)。

#idSelected {
   scroll-margin-top: 10rem;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM