History API:ScrollRestoration

By Paul Lewis(設計和性能倡導者)   翻譯:江天html

使用history api管理url是很是棒的一件事,能夠說這是一個好web app的極爲重要的特色。但它有一個缺點,滾動位置雖然被存儲但更重要的是,當history來回循環的時候的存儲。這種狀況每每意味着當滾動位置自動改變的時候很難看的跳轉,特別是當你的app發生變遷,或者是頁面內容發生了任何改變,基本上都會致使很是糟糕的用戶體驗。html5

爲了減小這種糟糕體驗你能作的很少。chrome在觸發scroll事件前會先出發popState事件,這意味着你能夠去popState中讀取到當前滾動位置,而後反向運用到scroll事件句柄上,使用window.scrollTo(至少能工做)。但firefox,先出發scroll事件,再是popstate,老的scroll值你毫無辦法獲取到,甭談儲存下來。呸!git

好消息是,這有個潛在的辦法,history.scrollRestoration。它提供兩個值,auto,做爲它的默認值,能夠像你所見的大多數狀況同樣工做,另外一個manual,意味着做爲一個開發者你擁有了自主掌控任何所需的scroll改變,當用戶循環往復於app的history中。若是須要,你能夠跟蹤scroll的位置軌跡,當你使用history.pushState(),push history的時候。github

這個特色是html5新增的實驗性質的api,雖然很炫。所以你在使用的時候須要確保瀏覽器是支持的,檢測代碼:
if ('scrollRestoration' in history) {
// Back off, browser, I got this...
history.scrollRestoration = 'manual';
}web

該api在chrome 46以上被支持,接口文檔:https://majido.github.io/scroll-restoration-proposal/history-based-api.html#web-idlchrome

相關文章
相關標籤/搜索