JS返回頁面時(shí)自動(dòng)回滾到歷史瀏覽位置
在我的系統(tǒng)實(shí)際開發(fā)過程中遇到一個(gè)需求,我需要讓應(yīng)用在各個(gè)頁面間跳轉(zhuǎn)時(shí)回到每頁原先瀏覽到的位置,方便用戶使用。
在網(wǎng)上查資料時(shí),看到的方案有不少,眾說紛紜,但真正給出可行可用代碼的寥寥無幾,所以我干脆按自己的想法用SessionStorage寫了一個(gè)緩存頁面的方法,在離開頁面時(shí)將需要緩存的容器中所有內(nèi)容都存到SessionStorage中,在返回頁面時(shí)重新加載,方便用戶操作,效果如下:
頁面緩存
使用方法
用法也很簡單,咱一步一步講。
首先,在你需要緩存標(biāo)簽容器的類名中加入cache,并寫一個(gè)name作為該容器的唯一標(biāo)記,示例如下:
<div class="weui-tab cache" name="index"> .... </div>
其次,聲明全局變量,獲取緩存內(nèi)容和容器,示例如下:
var cache; var cacheId = $(".cache").attr("name");
隨后,在頁面加載時(shí)調(diào)用緩存,在離開頁面時(shí)生成緩存,代碼如下:
window.onload = function () { //載入緩存的列表 loadCache(cacheId); } window.onunload = function () { //可以通過needCache這個(gè)flag來控制是否需要緩存 if (localStorage.needCache == 'true') { //離開頁面時(shí)生成緩存 createCache(cacheId); } } /* * * @brief 可對(duì)指定多個(gè)控件進(jìn)行內(nèi)容和位置的緩存 * @param cacheId 緩存元素的id * @return null * */ function createCache(cacheId) { //對(duì)內(nèi)容進(jìn)行緩存 var list = []; var listController = $('.cache'); $.each(listController, function (index, value, array) { list.push(value.innerHTML); }) //對(duì)瀏覽到的位置進(jìn)行緩存 var top = []; var topController = $(".cache").find(".top"); $.each(topController, function (index, value, array) { top.push(value.scrollTop); }) //存入sessionstorage中 sessionStorage.setItem(cacheId, JSON.stringify({ list: list, top: top })); } /* * * @breif 可對(duì)指定多個(gè)控件加載緩存 * @param 加載緩存的id * @return null * */ function loadCache(cacheId) { //一定要放在整個(gè)js文件最前面 cache = sessionStorage.getItem(cacheId); if (cache) { cache = JSON.parse(cache); //還原內(nèi)容 var listController = $('.cache'); $.each(listController, function (index, value, array) { value.innerHTML = cache.list[index]; }) //還原位置 var topController = $(".cache").find(".top"); $.each(topController, function (index, value, array) { value.scrollTop = cache.top[index]; }) } }
大部分都可以直接copy,再根據(jù)你的需要改進(jìn)一下,就可以很好的使用了。
github傳送地址: https://github.com/JunJieDing666/YouZhiGou
總結(jié)
以上所述是小編給大家介紹的JS返回頁面時(shí)自動(dòng)回滾到歷史瀏覽位置,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
JavaScript高級(jí)程序設(shè)計(jì) XML、Ajax 學(xué)習(xí)筆記
JavaScript高級(jí)程序設(shè)計(jì) XML、Ajax 學(xué)習(xí)筆記,需要的朋友可以參考下。2011-09-09js實(shí)現(xiàn)base64文件的處理以及下載方法
Base64是一種將二進(jìn)制數(shù)據(jù)編碼為ASCII字符的編碼方式,這篇文章主要給大家介紹了關(guān)于js實(shí)現(xiàn)base64文件的處理以及下載的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07JavaScript使用指針操作實(shí)現(xiàn)約瑟夫問題實(shí)例
這篇文章主要介紹了JavaScript使用指針操作實(shí)現(xiàn)約瑟夫問題,實(shí)例分析了javascript模擬數(shù)組指針操作的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04JavaScript調(diào)試常見報(bào)錯(cuò)及原因分析
這篇文章主要介紹了JavaScript調(diào)試常見報(bào)錯(cuò)及原因分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04微信小程序?qū)崿F(xiàn)手指拖動(dòng)選項(xiàng)排序
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)手指拖動(dòng)選項(xiàng)排序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04