关于微信H5页面的图片和视频全屏问题

项目需求

  1. 图片或者视频在页面中居中显示(边框圆角)
  2. 点击图片或者视频时,全屏显示/播放

看起来是很简单吧,但是移动端、微信内置的QQ垃圾浏览器组合起来,事情就没有那么简单了。。。还是先说简单的吧。

图片全屏

img标签上不绑定任何事件时,在安卓机上点击可以全屏显示,再次点击退出全屏,简直是perfect。完全符合需求,但是!!!
在IOS的部分机型上,点击伪全屏显示(微信顶部Bar有占位),再次点击没有反应。还有一些IOS机型是点击完全没有反应。好吧,没法偷懒了。

由于有顶部Bar的存在,无法完全全屏实现(目前没有发现可行方法)。降级为可视区域内全屏显示。

实现思路
  1. 首先获取到手机可视区域的宽。
var width = document.documentElement.clientWidth;
  1. 设置一个modal层,包含要显示图片,占满全屏,浮在最上层。
  2. 页面刚开始加载进入的时候,隐藏modal层。只显示居中的图片。
  3. 当点击居中的图片时,显示modal层,点击modal层时,隐藏modal。

视频全屏播放

QQ垃圾浏览器video标签安卓机上面非常丑陋,视频播放完会自动加入推荐视频。优先级最高,浮在最顶层,不支持border-radius。
在某华为机型上不会自动全屏播放,在其他一些安卓机上全屏播放完返回页面时,会导致样式错乱,好像冒出去了似的。

QQ浏览器提供的同层播放器接入规范也并没有什么卵用。

还是给大家隆重介绍一下video.js吧。纯英文文档,对于小白的我来说,看起来还是比较费劲的。我踩过的坑希望大家都能绕过去。

使用方法

引入方法:

第一种

   <link rel="shortcut icon" type="image/ico" href="/static/favicon.ico" />
   <link href="https://vjs.zencdn.net/7.0.3/video-js.css" rel="stylesheet">

第二种

npm install video.js

初始化:

<video id="video" class="video-js"></video>
// 引入核心就在class="video-js"

或者使用js初始化,这里不再介绍
实例化对象:

var video=videojs('video');
// 对应video标签的id

video.js相关的API丰富。

参考videojs入门指南1——videojs基础使用

1. autoplay()获取或者设置自动播放属性
2. currentTime()设置或者获取当前播放进度
3. duration()获取视屏的总长度,一般要等到视屏对象完全加载后才能获取到,一般我们会使用定时轮询的方式来获取总时长
4. ended()获取当前视屏对象是否已经处于结束状态
5. enterFullWindow() 当全屏不支持我们可以视频容器延伸到浏览器将让我们一样宽。经过试验改api完全无法使视屏进入全屏。分析源码后发现真正进入全屏的api应该是requestFullscreen(),但可惜该api只能又手势触发函数执行,连模拟点击都没法触发他。
// requestFullscreen()这个我的库中没有这个API? 因此我用的isFullscreen。
6. exitFullscreen() 退出全屏,有效的
7. exitFullWindow() 退出全屏,试了没什么用
8. height() 设置/获取播放器的高度
9. width() 设置/获取播放器的宽度
10. isFullscreen() 检查是否处于全屏模式
11. load() 开始加载视屏
12. loop() 在视频中获取或设置循环属性元素
13. muted() 获取当前的静音状态
14. pause() 暂停视频
15. paused() 检查视屏是否暂停
16. play() 播放视屏
17. played() 检查视屏播放状态
18. preload() 获取或设置预加载属性
19. ready() 视屏对象加载完成后调用ready中的回调函数
20. poster() 获取或设置海报图像源url
21. reset() 重载视屏
22. src() 更换视频源

事件监听方法:

video.on('ended', function() {
    //
  });
需求实现思路

video.js解决了微信安卓端视频播放完毕样式混乱,但是依然无法实现四周圆角。只能做绕过处理。进入页面显示视频的首帧图和播放键,让其看起来像是视频的样子。然后点击后,真正的视频标签全屏播放。这样变向的实现圆角。

<div class="share-video" >
    <img class="poster" src="{{videoPoster}}" on-click="changePlay">
    <img src="{{icon}}" class="pausePlay {{isPlay?'hidden':''}}" on-click="changePlay"/>
    <video id="video" class="video-js" style="width:0px;height:0px;">
    </video>
 </div> 
// SAN框架组件
// 组件attached生命周期函数中执行
// res为ajax请求返回的数据,包含视频和首帧图的url
videoInit(res) {
    this.data.set('videoPoster', res.data.image);
    const video = videojs('video', {
        sources: [{
            src: res.data.video
        }]
    });
    // 视频初始化时,设置宽高为0,隐藏
    video.ready(() => {
        video.width('0px');
        video.height('0px');
    });
    video.isFullscreen(true);// 设置要全屏播放。
    video.on('ended', () => {
        video.exitFullscreen();//退出全屏
        video.width('0px');
        video.height('0px');
        this.showIcon();//显示播放键
    });
    video.on('pause', this.showIcon.bind(this));
}

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

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,979评论 3 119
  • 毕业前,收到太多谢意, 像收到季节的果实, 像收到旅行的船票。 从你们嘴里说出, 感谢母校,感谢老师, 绝不客套的...
    玉藕阅读 255评论 0 4
  • 画主先画了房子,然后是草地,树,吊床,吊床上的是画主二宝,旁边是画主自己,本来想画面对孩子的,但不知道分析图能不能...
    何呵_d71d阅读 384评论 1 1
  • 蒋先生是个孤儿,不孤独的孤儿。 米小姐是个知了,叽叽喳喳的知了。 蒋先生只知道自己姓蒋,除此以外没有任何关于亲生父...
    苏景先生爱吃鱼阅读 273评论 1 0
  • 情刀 作者:屿上日光 爱是箭 情是刀 箭射中的是 一点伤心 刀劈中了是 一道伤口 一箭穿心 一刀入...
    屿上日光阅读 201评论 0 0