使用h5新特性,轻松监听任何App自带返回键(最新版)

1、前言

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


2、起因

大概半年前接到pm这需求,用纯h5实现多audio的播放、暂停、续播,页面放至驾考宝典App中,与客户端没有任何的交互,换言之就是混合型开发,功能型h5。所以与客户端相关的js不需要引用。那为什么不让客户端实现让前端h5实现?更何况App里的返回键还是原生的,ios和安卓里的双方协议可能还不一样。这是我撸码之前提出的疑问。pm小姐姐回我客户端还得发版、审核,太麻烦了,h5一个线上链接就搞定了。好吧,既然是这样,看上去这需求也挺简单的嘛,虽然之前也没做过类似的需求。不管三七二十一,撸起袖子就是干,开始了填坑之旅。


3、具体页面展示

这就是设计稿及最终成稿图了。用户点击任何一个图标都可以实现音频的播放,而且点击的同时图标会发生变化,再点击相同图标即可实现暂停,以此类推。当第一个音频正在播放时,点击其他图标,第一个音频会自动暂停,以此类推。我相信做过类似需求的朋友,应该会很熟悉产品到底希望我们前端做成什么样。所以,这里会有几个坑,不仅仅是监听App的返回键。我先说第一个。第一: 播放音频时,需要秒开,而不是等待一秒甚至更长时间。由于产品最开始给我的是本地音频文件,当时我也没考虑到线上音频文件(这样加载也许会更快但也许也会更慢),因为audio默认加载模式是先下载完,当音频就绪后再播放。所以最后我采取预加载模式,提高加载效率,尽可能让用户感受不到有延迟的存在。代码如下:

这样即可。但这只规避了第一个坑。第二个坑或可以称之为自主优化,即播放进度条的时刻显示和暂停了。需求里是没有播放进度条的,但在需求上线后我和pm小姐姐沟通的过程中,对方肯定、称赞了我的设计。播放进度条的设计和增加,更接近原生App、用户体验也更好。以及页面初始化时,菊花图的存在,也很有意义。自定义播放进度条,根据当前播放的音频时长而变化,该暂停就暂停,该重新初始化就重新初始化,很好的融合进页面。希望这点也帮助到大家。而涉及的代码,具体会用到canplay、timeupdate事件,以及load()函数等。此处我个人用jq实现的。

第二、DOM结构的渲染。非常不推荐在页面里写死,六个较少,勉强可以这么写。但是一旦数量增加,非常不可取。我最开始用的是传统的字符串拼接实现,但后来我导师建议我用模板引擎渲染,而驾考宝典事业部默认用artTemplate.js,最后我便修改了下。它分为原生JS和jq两个版本写法,各位也可自行研究下————模板引擎和拼接字符串的优缺点。如果自行设计一个模板引擎,该如何设计。


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


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


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


所有问题迎刃而解。

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

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

所以最后我是这么处理的,代码截图如下:


5、手机兼容性


众所周知现在的安卓机系统4.0等都是低配版了,该属性大部分安卓机都能识别,个人低配版安卓机无法识别,原因在于navigator.userAgent内核版本过低,chrome现在很多是64+了,所以遇到该问题只要想办法兼容它就好了。

综上,遇到这个问题各位也不要过度担心,办法肯定是有的,但不是一根筋,而是通过转变思路,快速实现需求。希望这个特性能帮到大家。

6、感谢及呼吁


自从18年3月我公开发表了这篇文章,当时写的很简洁,但阅读量还是有不少,我挺吃惊的,谢谢各位的认可。但随后包括直到今天,我发现有不少知名微信公众号和网站都转载了我的这篇文章,有些并没有标明原文地址和作者,这让我也很意外和失望。所以最后希望大家能互相尊重吧,最终每个人的劳动成果,谢谢。在转载文章时,标注真实的原文地址和作者。这也是为什么我这次要更新文章的原因。另外,现在我已经不做常规的业务开发,本人已转投h5游戏开发,集游戏创意、美术、编码、测试于一身,欢迎同道朋友交流哦。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,832评论 25 707
  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,607评论 1 180
  • 人生有千万种姿态 最幸福的一种 是活成自己喜欢的样子 人生有太多次遇见 最心动的一种 莫过于碰触到灵魂的霎那惊艳 ...
    linshowly阅读 233评论 1 1
  • 下午打开电脑,消息框里闪出一条消息:有个姑娘考完语文就自杀了。每年都有这样的消息,有人没考上大学自杀了,有人没考上...
    August不如吃茶去阅读 443评论 1 0