文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Html5页面中如何实现返回

2023-06-09 14:43

关注

小编给大家分享一下Html5页面中如何实现返回,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

看到这个题目你可能觉得这是什么鬼? 其实我想说的是这种,看下面的录制:

Html5页面中如何实现返回

这种交互在H5页面中比比皆是,点击城市->弹出城市选择浮层->按返回按钮关闭浮层。

这些操作都是不要点击左上角/右上角的关闭按钮就可以进行的,飞猪的H5是前进出现弹层,返回时弹层关闭,其他家都不行(去哪儿网H5飞机票,美团H5酒店)。

为什么要这么设计?

因为H5是在手机上操作的,手机上的手指可操作区域的覆盖范围很小,更别说左上角/右上角这些死角(取消/关闭)区域了。你肯定听过这个操作:轻触返回。这个在用户操作的时候非常方便友好,选择完城市后,不需要点击取消,直接在大拇指可以操作的地方点击返回就关闭了弹层。

如何实现

既然有这种非常好的需求,那作为开发肯定就会想法设法的实现这个功能了。 你甚至都不用google,你就应该会想到类似的history.back(),history.go()这些方法了。 然而想到这些依旧没用,理论上 浏览器/webview 的返回/前进的是要重新加载页面的,因为URL发生了变化。 如果你真的知道单页面应用(SPA),或者使用React/Vue你就应该知道有个东西叫:路由。 这些通过改变hash且无法刷新的url变化是HTML5时加入的history功能

the-history-interface

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);};
  1. pushState

  2. replaceState

还有一个事件

  1. onpopstate

pushState,replaceState 用来改变histroy堆栈顺序,onpopstate 在返回,前进的时候触发

vue-router中的实现也是如此(第1694行)

具体实现

既然说了这么多,那我们来看下怎么实现这种功能。

来看下 pushState 和 replaceState 的兼容性

Html5页面中如何实现返回

全绿,用起来放心多了。

思路:

  1. 点击弹层时 pushState 添加 hash

  2. "轻触返回"的时候触发 onpopstate 事件时候隐藏弹层并修改 hash

<button onclick="city()">        城市    </button><br>    <button onclick="calendar()">        日历    </button><br>    <button onclick="description()">        说明    </button>    <div id="city" class="com" style="display: none;">      模拟城市弹框层    </div>    <div id="calendar" class="com" style="display: none;">      模拟日历弹框层    </div>     <div id="description" class="com" style="display: none;">      模拟说明弹框层    </div>
  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页面中如何实现返回

看完了这篇文章,相信你对“Html5页面中如何实现返回”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯