具體功能描述如下:點(diǎn)擊列表中的某一條記錄(數(shù)據(jù)比較多壕探,列表較長(zhǎng)),會(huì)打開(kāi)地圖導(dǎo)航頁(yè)郊丛,導(dǎo)航頁(yè)返回時(shí)李请,需要跳到當(dāng)時(shí)所在的記錄行。本功能應(yīng)用于微信公眾號(hào)場(chǎng)景厉熟,相當(dāng)于移動(dòng)端領(lǐng)域导盅。
實(shí)現(xiàn)該功能,需要用到瀏覽器的 Window localStorage 屬性揍瑟。
localStorage 和 sessionStorage 屬性允許在瀏覽器中存儲(chǔ) key/value 對(duì)的數(shù)據(jù)白翻。localStorage 用于長(zhǎng)久保存整個(gè)網(wǎng)站的數(shù)據(jù),保存的數(shù)據(jù)沒(méi)有過(guò)期時(shí)間绢片,除非手動(dòng)刪除滤馍。注意: localStorage 屬性是只讀的。
如果我們只想將數(shù)據(jù)保存在當(dāng)前會(huì)話中底循,可以使用 sessionStorage 屬性泌辫, 這會(huì)將數(shù)據(jù)對(duì)象臨時(shí)保存同一窗口(或標(biāo)簽頁(yè))的數(shù)據(jù)中柠衍,關(guān)閉窗口或標(biāo)簽頁(yè)之后會(huì)刪除這些數(shù)據(jù)。
保存數(shù)據(jù):
localStorage.setItem("key", "value");
讀取數(shù)據(jù):
var value = localStorage.getItem("key");
刪除數(shù)據(jù):
localStorage.removeItem("key");
有了 localStorage 技術(shù),就可以著手實(shí)現(xiàn)啦O(∩_∩)O哈哈~
(1) 首先在列表頁(yè)加入 scroll 監(jiān)聽(tīng)事件,當(dāng)鼠標(biāo)下拉滾動(dòng)時(shí)补疑,記錄 scrollTop,即離頂部的偏移量:
$(window).scroll(function () {
if ($(document).scrollTop() != 0) {
var offset = $(window).scrollTop();
localStorage.setItem("offsetTop", offset);
}
});
這里用到了 jQuery 的 scroll() 方法。當(dāng)鼠標(biāo)滾動(dòng)時(shí)窗看,會(huì)發(fā)生 scroll 事件。scroll 事件適用于所有可滾動(dòng)的元素甚至是 window 對(duì)象(瀏覽器窗口)倦炒。
- 觸發(fā)被選元素的 scroll 事件:
$(selector).scroll()
- 當(dāng)發(fā)生 scroll 事件時(shí)需要運(yùn)行的函數(shù):
$(selector).scroll(function)
显沈,示例中就是這種用法。
jQuery 的 scrollTop() 方法會(huì)返回或設(shè)置匹配元素的滾動(dòng)條的垂直位置逢唤,這個(gè)值指的是滾動(dòng)條相對(duì)于其頂部的偏移拉讯,單位為 px。
- 該方法對(duì)于可見(jiàn)元素和不可見(jiàn)元素均有效鳖藕。
- 當(dāng)用于獲取值時(shí)魔慷,該方法只返回第一個(gè)匹配元素的 scroll top offset。
- 當(dāng)用于設(shè)置值時(shí)著恩,該方法設(shè)置所有匹配元素的 scroll top offset院尔。
(2) 當(dāng)頁(yè)面刷新時(shí),從 localStorage 獲取垂直偏移量的值喉誊,讓當(dāng)前頁(yè)滾動(dòng)到相應(yīng)的偏移量邀摆。
var offset = localStorage.getItem("offsetTop");
$(document).scrollTop(offset);
注意: 必須在頁(yè)面動(dòng)態(tài)數(shù)據(jù)加載完全后,再執(zhí)行上述邏輯伍茄,否則因?yàn)闆](méi)數(shù)據(jù)栋盹,頁(yè)面長(zhǎng)度只有當(dāng)前窗口的長(zhǎng)度,導(dǎo)致 scrollTop() 方法無(wú)效敷矫,切記哦例获!