博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
历史记录管理(window.history)
阅读量:6174 次
发布时间:2019-06-21

本文共 1471 字,大约阅读时间需要 4 分钟。

function toggle() {    let value = $('#myRange').val()    $('#output').text(value)    $('#myProgress').val(value)}toggle()$('#myRange').on('change', function () {    toggle()})

clipboard.png

以上这种不请求页面的情况是没有历史记录的,后退按钮用不了。

H5 API增加的window.history.pushState()window.onpopstate事件window.history.replaceState()可以在这种情况下进行历史记录的管理。

它们管理着一个状态对象栈和对应的URLpushState()可以为栈中添加一个新的状态对象和对应的URL,它们组成了一条记录,可以用这个对象设置页面状态。当点击后退按钮就触发onpopstate事件,该事件回调参数中有event.state保存着pushState添加的上一个状态对象,我们用这个旧的状态对象,就可以让页面恢复到旧的状态中。

replaceState()pushState()差不多,就是不添加新的状态,而是修改掉当前所在记录的状态。

还有个go(n),跟点击后退按钮差不多,就是可以指定后退多少,后退按钮只能一页一页退。

let state,initStatewindow.onpopstate = popStatewindow.onload = firstTimeLoadfunction firstTimeLoad() {    state = {        id:1,        value: $('#myRange').val()    }    initState = Object.assign({},state)    $('#myRange').on('change',changeAction)    display(state)}function changeAction(){    state.id++    state.value = $(this).val()    save(state)    display(state)}function popState(event){    if(event.state){        state = event.state        display(state)    }else{        display(initState)    }}function save(state){    let url = '#history-' + state.id    window.history.pushState(state,'',url)}function display(state){    $('#myRange').val(state.value)    $('#output').text(state.value)    $('#myProgress').val(state.value)}

注意popState(event)方法中的else部分,因为在页面onload时浏览器本身会往栈内添加第一个状态对象,这个对象是null,栈就会这样[null,记录1,记录2...],因此在页面加载firstTimeLoad()方法里记录初始状态,好在回退到为null对象时,用这个初始状态设置页面。

clipboard.png

转载地址:http://boqba.baihongyu.com/

你可能感兴趣的文章
二人小组
查看>>
log4j2.xml配置及例子
查看>>
Select的onchange事件
查看>>
C# .NET学习在线资源备忘 .
查看>>
爬取微信公众号文章
查看>>
公众号python
查看>>
Base64编码原理分析
查看>>
关于自增、自减运算(vc++6.0)
查看>>
浏览器字体渲染
查看>>
因子分析——建立载荷矩阵
查看>>
asp.net mvc应用架构的思考--Unity的应用及三层代码
查看>>
学JS的心路历程-for of和for in
查看>>
linux终端中最漂亮的几款字体介绍及安装
查看>>
git
查看>>
关于点击率模型,你知道这三点就够了
查看>>
LintCode_372 在O(1)时间复杂度删除链表节点
查看>>
CCF NOI1073 放苹果
查看>>
I00031 Look-and-say sequence
查看>>
Project Euler Problem 19 Counting Sundays
查看>>
python 判断质数还是合数
查看>>