百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

浅谈移动端视频播放闪屏

bigegpt 2024-08-09 11:17 2 浏览

感谢空调之父

前言

因为工作的原因,好久都没有更新博客。想写一些东西,可是又不知道写什么。码字写博客这个东西,果然像人体的肌肉一样,作为8块腹肌的我现在表示腹肌合并成一块。

但是,这并不能代表什么!作为一个明明可以靠脸吃饭的人,却靠才华去吃饭的人,我表示我依旧很自豪!耶耶!切克闹!

你有freestyle吗?

街边大妈:“哎!小伙子!这墨镜你到底买不买!不买赶紧还给我!”

车大棒:"买不起!买不起!还您墨镜......"

言归正传,今天就分享一下自己在处理移动端的遇到一些坑点。

移动端Click 300毫秒延迟

一日接到一个brief,大致就是一个loading引导页面,点击引导页上面按钮之后播放视频。视频播放完之后出现结束页,结束页上面挂着2个按钮一个跳向下载链接,一个指向分享。

项目brief

很好!so,easy!接到这个brief我就马不停蹄的开始干活了,但是很快出现了一个问题。在点击loading页面播放按钮的之后,在loading页切换到视频播放页面会有一个短暂的延迟闪屏问题。这就很尴尬了,刚刚喊的so,easy!这么块就卡住了,打脸未免太快了。(虽然经常被打脸ing)

我表示不服,赶紧上网搜索了一下,移动端click事件,结果发现移动端click事件会有300ms延迟!

这个操作还是头次听说

传说中的双击缩放:

这要追溯至 2007 年初。苹果公司在发布首款 iPhone 前夕,遇到一个问题 —— 当时的网站都是为大屏幕设备所设计的。于是苹果的工程师们做了一些约定,应对 iPhone 这种小屏幕浏览桌面端站点的问题。

这当中最出名的,当属双击缩放(double tap to zoom)。这也是会有上述 300 毫秒延迟的主要原因。

双击缩放,顾名思义,即用手指在屏幕上快速点击两次,iOS 自带的 Safari 浏览器会将网页缩放至原始比例。由于用户可以进行双击缩放或者双击滚动的操作,当用户一次点击屏幕之后,浏览器并不能立刻判断用户是确实要打开这个链接,还是想要进行双击操作。因此,iOS Safari 就等待 300 毫秒,以判断用户是否再次点击了屏幕。

鉴于 iPhone 的成功,其他移动浏览器都复制了 iPhone Safari 浏览器的多数约定,包括双击缩放。几乎现在所有的移动端浏览器都有这个功能。

------来自与Apple公司的一次six、six、six的操作!

解决300ms延迟方案

之后就尝试就上网搜索,解决300ms延迟方案的解决方案。

1、禁用缩放

2、设置 viewport 的 device-width

3、使用指针事件

4、使用 touchend 事件

上述方法都有采用过,但是切换成播放视频的时候依旧会出现闪屏。

不按照套路出牌呀!

难道是300ms延迟的问题没有解决?抓了抓头,然后思索了一会。之后用定时器作了一个监听,然后用console.log去输出检查结果,结果300ms的问题的确解决了,但是闪屏的问题却是还是存在的。

loading页面淡入处理

绝望的我坐在小板凳静静的发呆,难道这个浏览器在播放视频的时候本身会有一个延迟效果。因此会导致loading页面与视频衔接的时候会出现一个间断的延迟效果,因此就会出闪屏?

有了这个想法之后,突然灵光一想既然视频本身会有一个延迟。那么我把loading也做一个延迟处理的效果。这样两边都延迟一会,这样就不会出现了闪屏现象了。

于是在CSS代码里面加入一段css代码

@-webkit-keyframes fadeout500 {

点击播放按钮之后,就给loading页添加一个css类名fadeout500。在Google浏览器模拟手机上面运行,很好没有闪屏问题。

视频监听处理

PC上面模拟器没有问题,高兴的我很快拿起了我的安卓手机开始测试。很好也没有出现闪屏现象,路面畅通,可以随时开车。

开车开到一半的时候,然后看见后台哥哥的iPhone 6 Plus正静静躺在桌子面。于是停下来,打算借后台哥哥的iPhone继续继续开车。当我按下播放视频之后,很快屏幕一闪。

妖兽!居然翻车了!这个闪屏到底是什么鬼呀?

'你在视频播放之后再让loading页面消失就不会出现闪屏了!' 路过的老大看见坐在板凳上抽风的我,淡淡的补充了一句。

‘视频播放在再消失’顺着老大的话语我嘴角跟着念叨一下,然后猛然间所有的思路全部涌现过来了。

闪屏的主因

所有如果我改变思路,点击播放之后先不忙着让loading页面消失,而是控制播放视频。同时对于视频做一个监听事件。

这个时候就得用到html5 相关DOM的事件和属性

音频/视频属性:currentTime( 蓝色字体指向MDN文档说明)

currentTime 设置或返回音频/视频中的当前播放位置(以秒计)

音频/视频事件: timeupdate

timeupdate 当目前的播放位置已更改时触发。

var loadingController = function () {

完美的解决,这样也不用还在首页加个什么淡入淡出的效果了,只需要确定视频播在控制loading消失就ok。

对了,为了代码的严谨性,需要在loading消失的事件前面,再加一个事件移出事件监听。

video.removeEventlistener(("timeupdate", loadingController;)

小结:

以上就是我对于移动端视频播放闪屏的处理过程一点胡扯八扯

原创文章,文笔有限,才疏学浅,文中若有不正之处,欢迎各位啪啪的打脸赐教。

我是车大棒,我的目标是星辰与大海!

相关推荐

10w qps缓存数据库——Redis(redis缓存调优)

一、Redis数据库介绍:Redis:非关系型缓存数据库nosql:非关系型数据库没有表,没有表与表之间的关系,更不存在外键存储数据的形式为key:values的形式c语言写的服务(监听端口),用来存...

Redis系列专题4--Redis配置参数详解

本文基于windowsX64,3.2.100版本讲解,不同版本默认配置参数不同在Redis中,Redis的根目录中有一个配置文件(redis.conf,windows下为redis.windows....

开源一夏 | 23 张图,4500 字从入门到精通解释 Redis

redis是目前出场率最高的NoSQL数据库,同时也是一个开源的数据结构存储系统,在缓存、数据库、消息处理等场景使用的非常多,本文瑞哥就带着大家用一篇文章入门这个强大的开源数据库——Redis。...

redis的简单与集群搭建(redis建立集群)

Redis是什么?是开源免费用c语言编写的单线程高性能的(key-value形式)内存数据库,基于内存运行并支持持久化的nosql数据库作用主要用来做缓存,单不仅仅是做缓存,比如:redis的计数器生...

推荐几个好用Redis图形化客户端工具

RedisPlushttps://gitee.com/MaxBill/RedisPlusRedisPlus是为Redis可视化管理开发的一款开源免费的桌面客户端软件,支持Windows、Linux...

关于Redis在windows上运行及fork函数问题

Redis在将数据库进行持久化操作时,需要fork一个进程,但是windows并不支持fork,导致在持久化操作期间,Redis必须阻塞所有的客户端直至持久化操作完成。微软的一些工程师花费时间在解决在...

你必须懂的Redis十大应用场景(redis常见应用场景)

Redis作为一款高性能的键值存储数据库,在互联网业务中有着广泛的应用。今天,我们就来详细盘点一下Redis的十大常用业务场景,并附上Golang的示例代码和简图,帮助大家更好地理解和应用Redis。...

极简Redis配置(redis的配置)

一、概述Redis的配置文件位于Redis安装目录下,文件名为redis.conf(Windows名为redis.windows.conf,linux下的是redis.conf)你可以通过C...

什么是redis,怎么启动及如何压测

从今天起咱们一起来学习一下关于“redis监控与调优”的内容。一、Redis介绍Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。...

一款全新Redis UI可视化管理工具,支持WebUI和桌面——P3X Redis UI

介绍P3XRedisUI这是一个非常实用的RedisGUI,提供响应式WebUI访问或作为桌面应用程序使用,桌面端是跨平台的,而且完美支持中文界面。Githubhttps://github....

windows系统的服务器快速部署java项目环境地址

1、mysql:https://dev.mysql.com/downloads/mysql/(msi安装包)2、redis:https://github.com/tporadowski/redis/r...

window11 下 redis 下载与安装(windows安装redis客户端)

#热爱编程是一种怎样的体验#window11下redis下载与安装1)各个版本redis下载(windows)https://github.com/MicrosoftArchive/r...

一款轻量级的Redis客户端工具,贼好用!

使用命令行来操作Redis是一件非常麻烦的事情,我们一般会选用客户端工具来操作Redis。今天给大家分享一款好用的Redis客户端工具TinyRDM,它的界面清新又优雅,希望对大家有所帮助!简介Ti...

一个.NET开发且功能强大的Windows远程控制系统

我们致力于探索、分享和推荐最新的实用技术栈、开源项目、框架和实用工具。每天都有新鲜的开源资讯等待你的发现!项目介绍SiMayRemoteMonitorOS是一个基于Windows的远程控制系统,完...

Redis客户端工具详解(4款主流工具)

大家好,我是mikechen。Redis是大型架构的基石,也是大厂最爱考察内容,今天就给大家重点详解4款Redis工具@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集...