使用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样式linear-gradient的使用实例
Jan 16 HTML / CSS
css3 box-sizing属性使用参考指南
Jan 08 HTML / CSS
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
Jun 06 HTML / CSS
纯CSS3制作的简洁蓝白风格的登录模板(非IE效果更好)
Aug 11 HTML / CSS
CSS类名支持中文命名的示例
Apr 04 HTML / CSS
CSS3实现自定义Checkbox特效实例代码
Apr 24 HTML / CSS
html5的websockets全双工通信详解学习示例
Feb 26 HTML / CSS
简单整理HTML5的基本特性和语法
Feb 18 HTML / CSS
纯HTML5+CSS3制作生日蛋糕(代码易懂)
Nov 16 HTML / CSS
HTML5打开手机扫码功能及优缺点
Nov 27 HTML / CSS
基于MUI框架使用HTML5实现的二维码扫描功能
Mar 01 HTML / CSS
AmazeUI 单选框和多选框的实现示例
Aug 18 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
CodeIgniter针对lighttpd服务器URL重写的方法
2015/06/10 PHP
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
用js实现预览待上传的本地图片
2007/03/15 Javascript
URL地址中的#符号使用说明
2011/02/12 Javascript
javascript打开word文档的方法
2014/04/16 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
微信小程序发送短信验证码完整实例
2019/01/07 Javascript
详解Vue源码学习之双向绑定
2019/04/10 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
Vue 401配合Vuex防止多次弹框的案例
2020/11/11 Javascript
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
在Python程序中操作文件之flush()方法的使用教程
2015/05/24 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
2018/05/08 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
matplotlib基础绘图命令之bar的使用方法
2020/08/13 Python
python实现网页录音效果
2020/10/26 Python
jupyter notebook快速入门及使用详解
2020/11/13 Python
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
马来西亚综合购物网站:Lazada马来西亚
2018/06/05 全球购物
struct与class的区别
2014/02/03 面试题
database面试题
2013/03/28 面试题
自荐信需注意事项
2014/01/25 职场文书
校园之星获奖感言
2014/01/29 职场文书
工作失职检讨书
2015/01/26 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书