使用html5新特性轻松监听任何App自带返回键的示例


Posted in HTML / CSS onMarch 13, 2018

1、前言

如今h5新特性、新标签、新规范等有很多,而且正在不断完善中,各大浏览器商对它们的支持,也是相当给力。作为前端程序员,我觉得我们还是有必要积极关注并勇敢地加以实践。接下来我将和各位分享一个特别好用的h5新特性(目前也不是特别新),轻松监听任何App自带的返回键,包括安卓机里的物理返回键,从而实现项目开发中进一步的需求。

2、起因

大概半年前接到pm一需求,用纯h5实现多audio的播放、暂停、续播,页面放至驾考宝典App中,与客户端没有任何的交互,所以与客户端相关的js不需要引用。看上去这需求挺简单的嘛,虽然之前也没做过类似的需求。不管三七二十一,撸起袖子就是干。开始了学习之旅。

3、我这里着重介绍下我具体是怎么监听任何App自带的返回键,以及安卓机里的物理返回键。

那为什么我要去监听呢,这里我有必要强调强调再强调。苹果手机不管是微信、QQ、App,还是浏览器里,涉及到audio、video,返回上一页系统会自动暂停当前的播放的,但不是所有安卓机都可以。所以我们自己必须自定义监听。很多朋友可能第一想法就是百度,然后出来的答案无非是这样

pushHistory(); 
window.addEventListener("popstate", function(e) { 
    alert("我监听到了浏览器的返回按钮事件啦");//根据自己的需求实现自己的功能 
}, false); 
function pushHistory() { 
    var state = { 
        title: "title", 
        url: "#"
    }; 
    window.history.pushState(state, "title", "#"); 
}

是不是很眼熟?然而关键需求不能完美实现,要这段代码有何用,当时我也是绞尽脑汁。直到经过大神好友指导,复制了这段代码

var hiddenProperty = 'hidden' in document ? 'hidden' :    
    'webkitHidden' in document ? 'webkitHidden' :    
    'mozHidden' in document ? 'mozHidden' :    
    null;
var visibilityChangeEvent = hiddenProperty.replace(/hidden/i, 'visibilitychange');
var onVisibilityChange = function(){
    if (!document[hiddenProperty]) {    
        console.log('页面非激活');
    }else{
        console.log('页面激活')
    }
}
document.addEventListener(visibilityChangeEvent, onVisibilityChange);

所有问题迎刃而解。

这段代码的原理我个人理解就是通过判断用户浏览的是否为当前页,从而进行相关操作。

这是 MDN相关链接:https://developer.mozilla.org/zh-CN/docs/Web/API/Document/hidden

并不是说真的可以通过JS监听到App里的自带返回键,甚至安卓的物理返回键,而是通过转变思路,快速实现需求。希望这个特性能帮到各位。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
使用css3制作动感导航条示例
Jan 26 HTML / CSS
CSS3中background-clip和background-origin的区别示例介绍
Mar 10 HTML / CSS
详解css3中 text-fill-color属性
Jul 08 HTML / CSS
CSS3 实现的缩略图悬停效果
Dec 09 HTML / CSS
html5实现完美兼容各大浏览器的播放器
Dec 26 HTML / CSS
详解移动端Html5页面中1px边框的几种解决方法
Jul 24 HTML / CSS
html5使用canvas压缩图片的示例代码
Sep 11 HTML / CSS
解析html5 canvas实现背景鼠标连线动态效果代码
Jun 17 HTML / CSS
Html5跳转到APP指定页面的实现
Jan 14 HTML / CSS
详解HTML5布局和HTML5标签
Oct 26 HTML / CSS
如何查看浏览器对html5的支持情况
Dec 15 HTML / CSS
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
Jul 01 HTML / CSS
配置H5的滚动条样式的示例代码
Mar 09 #HTML / CSS
Canvas制作旋转的太极的示例
Mar 09 #HTML / CSS
详解px单位html5响应式方案
Mar 08 #HTML / CSS
html5开发三八女王节表白神器
Mar 07 #HTML / CSS
使用HTML5和CSS3制作一个模态框的示例
Mar 07 #HTML / CSS
Canvas制作的下雨动画的示例
Mar 06 #HTML / CSS
html2canvas把div保存图片高清图的方法示例
Mar 05 #HTML / CSS
You might like
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
PHP数据库调用类调用实例(详细注释)
2012/07/12 PHP
php防止sql注入的方法详解
2017/02/20 PHP
Javascript 面向对象 命名空间
2010/05/13 Javascript
网站页面自动跳转实现方法PHP、JSP(下)
2010/08/01 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
jQuery中setTimeout的几种使用方法小结
2013/04/07 Javascript
jquery live()调用不存在的解决方法
2014/02/26 Javascript
javascript常用方法汇总
2014/12/02 Javascript
javaScript实现滚动新闻的方法
2015/07/30 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
window.open打开窗口被拦截的快速解决方法
2016/08/04 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
Vue.js中用v-bind绑定class的注意事项
2016/12/13 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
2017/05/03 Javascript
Nodejs实现多房间简易聊天室功能
2017/06/20 NodeJs
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
vue 实现滚动到底部翻页效果(pc端)
2019/07/31 Javascript
详解Typescript里的This的使用方法
2021/01/08 Javascript
使用Python的PIL模块来进行图片对比
2016/02/18 Python
对pandas的层次索引与取值的新方法详解
2018/11/06 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
python实现横向拼接图片
2020/03/23 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
从当地商店送来的杂货:Instacart
2018/08/19 全球购物
如何在Shell脚本中使用函数
2015/09/06 面试题
物流仓管员岗位职责
2013/12/04 职场文书
MBA推荐信怎么写
2015/03/25 职场文书
2016年国庆节假期旅游工作总结
2016/04/01 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android