使用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 相关文章推荐
image-set实现Retina屏幕下图片显示详细介绍
Dec 24 HTML / CSS
用CSS3来实现社交分享按钮
Nov 11 HTML / CSS
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
Apr 26 HTML / CSS
CSS3实现滚动条动画效果代码分享
Aug 03 HTML / CSS
利用HTML5+CSS3实现3D转换效果实例详解
May 02 HTML / CSS
移动web模拟客户端实现多方框输入密码效果【附代码】
Mar 25 HTML / CSS
关于HTML5的22个初级技巧(图文教程)
Jun 21 HTML / CSS
HTML5 Web Database 数据库的SQL语句的使用方法
Dec 09 HTML / CSS
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
Jan 09 HTML / CSS
HTML5实现晶莹剔透的雨滴特效
May 14 HTML / CSS
HTML5声音录制/播放功能的实现代码
May 03 HTML / CSS
div或img图片高度随宽度自适应的方法
Feb 06 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
《破坏领主》销量已超100万 未来将继续开发新内容
2020/03/08 其他游戏
Terran历史背景
2020/03/14 星际争霸
phpwind中的数据库操作类
2007/01/02 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
2012/03/11 PHP
浅析Js中的单引号与双引号问题
2013/11/06 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
node.js中的console.dir方法使用说明
2014/12/10 Javascript
浅谈JavaScript数据类型及转换
2015/02/28 Javascript
jQuery随机密码生成的方法
2015/03/09 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
2016/05/10 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
浅谈js中的this问题
2017/08/31 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
基于vue.js组件实现分页效果
2018/12/29 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
2019/01/27 Javascript
原生JavaScript实现滑动拖动验证的示例代码
2019/12/06 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
封装 axios+promise通用请求函数操作
2020/08/11 Javascript
从表单校验看JavaScript策略模式的使用详解
2020/10/17 Javascript
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
浅谈flask中的before_request与after_request
2018/01/20 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
使用Python的networkx绘制精美网络图教程
2019/11/21 Python
Python for i in range ()用法详解
2020/09/18 Python
python内置模块collections知识点总结
2019/12/19 Python
详解Python高阶函数
2020/08/15 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
工程专业求职自荐书范文
2014/02/08 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
党的群众路线教育实践活动整改落实情况报告
2014/10/28 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书
Go语言 go程释放操作(退出/销毁)
2021/04/30 Golang
详解Python自动化之文件自动化处理
2021/06/21 Python