video 标签沉浸式播放解决方案

“沉浸播放式”这个概念是我从Android开发里面的沉浸式引申过来的一个概念,沉浸式其实就是隐藏页面顶部的status bar和底部的navigation bar之后呈现出来的页面,一般用户很容易把沉浸式状态栏和透明化状态栏混为一谈,他们的区别如下:

沉浸式状态栏

透明化状态栏

那么回到前端开发,让我们看一下如何让video标签呈现这种沉浸式的播放效果,平常我们使用video标签都是这样的:

<div id="app">

 <video

   id="videos"

   playsinline="true"

   webkit-playsinline="true" /*IOS播放视频会自动调用原生播放器全屏播放,这里使用这个属性让IOS内播放视频的时候使用inline模式,同时我们设置宽高等于屏幕宽高来实现IOS下的全屏播放*/

   x5-video-orientation="portraint"

   preload="auto"

   style="width: 100%;height: 100%"

 >

   <source src="//gw.alicdn.com/bao/uploaded/TB1YKBlb_ZRMeJjSsppXXXrEpXa.mp4" type="video/mp4">

 </video>

</div>

正常情况下我们要做竖版视频,视频的比例都是16:9,也就是高/宽约等于1.78,这里用到的测试视频也是16:9的,而且默认情况下video的object-fit属性的值是contain,也就是保持长宽比,我们先看下不做处理在iphone6/7/8下的表现情况:

在iphone6/7/8下的表现情况

看起来比较完美,因为这几款手机分辨率都是16:9的,视频维持屏幕大小完全没有问题,接下来看一下分辨率不是16:9的机型,比较典型的就是iphoneX,面向老板开发的同学可能对适配这款机型颇有怨言:

iphoneX下的表现情况

有人会觉得奇怪为什么我们设置了video的宽高都是百分百上下还漏出了两个白条,这里其实是object-fit这个属性在作怪,既然默认的是contain,我们就改为fill吧,再看一下效果:

object-fit:fill

这样看起来没问题,但是你觉得产品小姐姐会这么轻易放过你吗?too navie,你看我们正常16:9的视频在iphoneX这种18:9的屏幕上是有形变的,而且市面上这么多分辨率不同的设备,如果要追求不同的手机上有最接近的用户体验这么做肯定是不行的,有人可能会提到object-fit中的cover属性,没错,这个属性可以让我们的视频等比例缩放,如果宽高不匹配会对处理对象做裁剪操作,来我们看一下现在在微信里面的效果:

微信里的效果

其他效果都蛮好,你会发现右上角有个可恶的全屏,这个全屏按钮是微信的x5内核自带的,没法去除,这个有很多人给腾讯x5开发团队那边提过issue,但是暂时没有办法处理,我后续会提到一个另辟蹊径的方案,先回到这里,点了这个全屏按钮之后会进入微信的全屏播放模式,而且放完之后会出现一堆广告列表,这都是我们不想看到了,其次如果我们的产品需求不单单是全屏播放,还想在视频上面放一些交互按钮之类的,这种方式就做不到,因为video是在最上一级的,但是两种方式例外,一个是微信把你们的域名加入白名单,这种可以在Android手机的video上随意放置dom元素,IOS本身没有这个限制,另一种更为通用的方式是用微信x5内核的同层播放模式,这种模式有两种好处:

1、去除了右上角讨厌的”全屏”按钮

2、真正实现了x5内核下的沉浸式播放,我们看到目前的实现在微信上还是带有浏览器的titleBar的 在x5内核的环境下实现同层播放很简单,只需要在video上添加这么两行属性:

x5-video-player-type="h5"

x5-video-player-fullscreen="true"

再看一下这个时候的效果:

同层播放模式下的效果

确实是真正意义上的沉浸式播放,如果你的app里面webview用的也是x5内核那么这个页面也能在app上达到同样的效果,但是这种同层播放依然有无法解决的问题,首先这个全屏模式会重新计算宽高,触发视口大小变化,也就是说用户视觉上会有一个视口变化的过程,其次,同层播放模式虽然没有了”全屏”按钮,但是左上角的按钮用于退出沉浸式全屏,右上角的按钮点开是分享,分享的内容不可定制,固定位当前页面的title+url的组合,如果你对页面的定制化要求比较高的话,我这里有一个备选的方案,那就是放弃同层播放模式,当然这个前提是你不需要在video页面上做一些交互操作,或者说你的域名处于微信白名单下,当我们在非沉浸式下又想要打到等比例缩放视频的效果,同时我们还要去除x5自带的”全屏”按钮,最好的方式就是动态去计算视频的宽高,把视频撑大,把”全屏”按钮撑出浏览器页面,这样基本就能达到我们的目的了,这里以16:9的标准为例:

this.$nextTick(() => {

     // 动态处理video标签宽高适配

     const video = this.$refs.video

     const ratio = Math.fround(document.documentElement.clientHeight / document.documentElement.clientWidth)

     if (ratio >= 1.78) {

       // 竖屏

       video.height = document.documentElement.clientHeight + 100

       video.width = Math.floor(video.clientHeight * 0.572)

       const winW = document.documentElement.clientWidth

       video.style.left = (winW - video.width) / 2 + 'px'

     } else {

       // 宽屏

       video.width = document.documentElement.clientWidth + 100

       video.height = Math.floor(video.width * 1.78)

       const winH = document.documentElement.clientHeight

       video.style.top = (winH - video.height) / 2 + 'px'

     }

   })

讲解下思路,16:9的视频也就是高宽比差不多是1.78,那么大于这个比例的就是类似于iphoneX的长屏幕类型的手机,对于这种手机我们要做等比缩放适配的话就以手机的长为标准,先让视频的长度等于手机的长度,这里我加上的100px可以理解为上下在加上50px,目的就是为了把视频长度拉大,让”全屏”按钮消失在视线内,实际这个值可以自己尝试修改,让后宽就是此时高的1/78倍,然后使用绝对布局去设置视频的左边距,就可以达到等比缩放的效果,同理可以理解处理宽屏手机的代码部分,当然,应该还有更完美的方案,可以在评论区留言探讨~

作者:李牧羊

https://www.limuyang.cc/2018/07/22/video标签沉浸式播放解决方案/

感兴趣的小伙伴,可以关注公众号【grain先森】,回复关键词 “小程序”,获取更多资料,更多关键词玩法期待你的探索~

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

推荐阅读更多精彩内容