您现在的位置是:网站首页> 编程资料编程资料
Html5页面中的返回实现的方法html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
2023-10-13
307人已围观
简介 这篇文章主要介绍了Html5页面中的返回实现的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
看到这个题目你可能觉得这是什么鬼? 其实我想说的是这种,看下面的录制:

这种交互在H5页面中比比皆是,点击城市->弹出城市选择浮层->按返回按钮关闭浮层。
这些操作都是不要点击左上角/右上角的关闭按钮就可以进行的,飞猪的H5是前进出现弹层,返回时弹层关闭,其他家都不行(去哪儿网H5飞机票,美团H5酒店)。
为什么要这么设计?
因为H5是在手机上操作的,手机上的手指可操作区域的覆盖范围很小,更别说左上角/右上角这些死角(取消/关闭)区域了。你肯定听过这个操作:轻触返回。这个在用户操作的时候非常方便友好,选择完城市后,不需要点击取消,直接在大拇指可以操作的地方点击返回就关闭了弹层。
如何实现
既然有这种非常好的需求,那作为开发肯定就会想法设法的实现这个功能了。 你甚至都不用google,你就应该会想到类似的history.back(),history.go()这些方法了。 然而想到这些依旧没用,理论上 浏览器/webview 的返回/前进的是要重新加载页面的,因为URL发生了变化。 如果你真的知道单页面应用(SPA),或者使用React/Vue你就应该知道有个东西叫:路由。 这些通过改变hash且无法刷新的url变化是HTML5时加入的history功能
interface History { readonly attribute unsigned long length; attribute ScrollRestoration scrollRestoration; readonly attribute any state; void go(optional long delta = 0); void back(); void forward(); void pushState(any data, DOMString title, optional DOMString? url = null); void replaceState(any data, DOMString title, optional DOMString? url = null); };- pushState
- replaceState
还有一个事件
- onpopstate
pushState,replaceState 用来改变histroy堆栈顺序,onpopstate 在返回,前进的时候触发
vue-router中的实现也是如此(第1694行)
具体实现
既然说了这么多,那我们来看下怎么实现这种功能。
来看下 pushState 和 replaceState 的兼容性

全绿,用起来放心多了。
思路:
- 点击弹层时 pushState 添加 hash
- "轻触返回"的时候触发 onpopstate 事件时候隐藏弹层并修改 hash
button { border: #0000; background-color: #f90; } .com { position: absolute ; top: 0; bottom: 0; left: 0; right: 0; background-color: #888589; } var cityNode = document.getElementById('city'); var calendarNode = document.getElementById('calendar'); var descriptionNode = document.getElementById('description'); function city() { cityNode.style.display = 'block'; window.history.pushState({'id':'city'},'','#city') } function calendar() { calendarNode.style.display = 'block'; window.history.pushState({'id':'calendar'},'','#calendar') } function description() { descriptionNode.style.display = 'block'; window.history.pushState({'id':'description'},'','#description') } window.addEventListener('popstate', function(e){ // alert('state:' + e.state + ', historyLength:' + history.length); if (e.state && e.state.id === 'city') { history.replaceState('','','#'); cityNode.style.display = 'block'; } else if (e.state && e.state.id === 'calendar') { history.replaceState('','','#'); calendarNode.style.display = 'block'; } else if (e.state && e.state.id === 'description') { history.replaceState('','','#'); descriptionNode.style.display = 'block'; } else { cityNode.style.display = 'none'; calendarNode.style.display = 'none'; descriptionNode.style.display = 'none'; } }) 主要看 JS 代码,监听页面的前进和后退事件来控制history。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关内容
- 简述Html5 IphoneX 适配方法有关HTML5页面在iPhoneX适配问题
- canvas实现按住鼠标移动绘制出轨迹的示例代码canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动HTML5 canvas实现的粒子流向轨迹动画特效源码html5 canvas实现的行星运动轨迹动画特效源码
- 全民英雄扫荡模式玩法攻略 全民英雄扫荡模式图文教程_手机游戏_游戏攻略_
- 全民英雄敏捷型英雄之剑圣/技能/数值/在哪暴_手机游戏_游戏攻略_
- 全民英雄如何快速刷金币 全民英雄金币的作用说明_手机游戏_游戏攻略_
- 全民英雄敏捷橙卡推荐小黑 小黑技能全面详解_手机游戏_游戏攻略_
- 全民英雄神灵武士卡牌解析 全民英雄神灵武士到底好不好用_手机游戏_游戏攻略_
- 全民英雄装备_前期神器神奇枝干_枝干使用方法技巧_手机游戏_游戏攻略_
- 天天酷跑手动党怎么快速刷高分 不作弊高分经验技巧_手机游戏_游戏攻略_
- 史上最坑爹的游戏 第11关 详细图文攻略_手机游戏_游戏攻略_
