在原生开发中控制HTML5视频

字节青霭探
• 阅读 1646

前言

有人可能会问,在如今各种前端框架和开发工具横行的年代,还用得上原生开发吗?作为一名从业18年的前端讲师,我要告诉大家学习原生开发的优点:

  1. 原生开发有助于同学们从原理上认识前端知识,并在本质上学会它。
  2. 原生开发有助于锻炼同学们的编程水平,提高大家对前端知识的理解。
  3. 正所谓万变不离其宗,做过项目开发的人们都知道,无论用什么框架,也是要用到扎实的JavaScript功底的。
  4. 以小程序开发为例,如果用户要在小程序中添加一个非常长的页面,有的时候还是需要使用来实现的,这就可能会涉及到原生页面的制作。

今天我就为大家讲一讲在原生开发过程中,标记对遇到的一些问题以及这些问题的解决方案。


一、video标记对的属性

下面列出了video标记对在开发过程中常用的原生属性。

在原生开发中控制HTML5视频

二、video标记对的方法

下面列出了video标记对在开发过程中常用的原生方法。

在原生开发中控制HTML5视频

三、video标记对的事件

下面列出了video标记对在开发过程中常用的原生事件以及事件的触发机制。

在原生开发中控制HTML5视频

四、PC端video标记对的问题

1、视频如何自动播放

当前的浏览器都已经将视频的自动播放功能去掉了,也就是说在标记对上使用autoplay属性也无法实现视频的自动播放功能。
但是如果为标记对添加上autoplay属性的同时设置其静音播放是可以实现的。

<video src=“video/01.mp4” autoplay muted loop></video>

2、视频的全屏播放

有的视频是要在页面中实现自动全屏播放的,这类视频往往在页面一进入时就能够占据整个屏幕。目的是显示酷炫的视频效果,而不是展示声音,因此可以静音自动播放。

HTML代码如下所示:

<video src=“video/01.mp4” class=“bgVideo” autoplay muted loop></video>

CSS代码如下所示:

.bgVideo{
    width:100%;height: 100%;
    min-height: 1080px;
    object-fit: cover;
}

3、视频全屏后导致的垂直滚动条问题

有的视频由于高度过大,在全屏播放后会在页面中产生垂直滚动条。如果不想让页面产生垂直滚动条,即在一屏中显示所有内容包括视频,则可以按照如下的CSS代码进行设置。

.bgVideo{
    position:fixed; 
    z-index:-1000;
}

五、移动端video标记对的问题

1、【IOS】iPhone系列手机中视频的内联播放问题

使用IOS系统的设备,视频在播放时会自动“竖屏全屏”,也就是说在这类设备中单击视频播放按钮,视频不会在页面原有的位置中“内联播放”,而是会出现类似于全屏的模式。即页面展示为黑色的背景,但是视频在手机竖屏的情况下播放。

在原生开发中控制HTML5视频
这个问题可以通过在标记对中添加属性的方式来解决。

  • IOS10及其以上版本的操作系统可以支持playsinline属性。
  • IOS10以下版本的操作系统只能使用-webkit-playsinline属性。

所以,HTML代码如下所示:

<video playsinline webkit-playsinline></video>

2、【Android】多个视频同时播放问题

一个页面下若有多个视频,这样的情况在Andro系统中可能会出现多个视屏同时播放的现象。
该问题的解决原理:在一个视频的play事件中,将其他所有的视频都暂停掉。

jQuery代码如下所示:

$("video").on("play",function(){
    var reg=/android/i;
    if(reg.test(navigator.userAgent)){
       var currentVideo=$(this).get(0);
       for(var i=0;i<$("video").length;i++){
          if($("video").get(i)!==currentVideo){
             $("video").get(i).pause();
          }
       }
   }
})

注意:在视频的play事件中不要再调用play()方法,以免产生堆栈溢出。

3、在移动端自定义视频的控制按钮

对于不显示系统原生控制面板的视频,使用自己制作的元素来控制视频的播放与暂停。

jQuery代码如下所示:

$(".control").on("touchstart",function(){
    var node=$(this).next().get(0);
    if(node.paused){
        node.play();        
        $(this).find("img").css("display","none");
    }else{
        node.pause();
        $(this).find("img").css("display","inline");
    }
}).on("touchend",function(){
    var node=$(this).next().get(0);
    node.muted=false;
})

注意:此时视频在HTML文档中必须设置为静音状态。

4、补充:移动端如何判断用户设备是IOS设备还是Android设备

使用navigator.userAgent属性来判断返回值当中是否带有特定的字符串。

(1)判定Android设备:

var reg=/android/gi;
if(reg.test(navigator.userAgent)){
   console.log(“这是Android设备”);
}

(2)判断IOS设备:

var reg=/(iphone)|(ipad)|(ipod)/gi;
if(reg.test(navigator.userAgent)){
    console.log(“这是ISO设备”);
}

5、补充:【IOS】为适配iPhoneX设备制作两套页面

由于iPhoneX及其以上的设备高度远远大于iPhoneX以下的产品(高度大于812px),因此对于具有全屏背景的页面需要为大高度的设备再做一套页面,或者判断设备加载不同的背景图片。

那么如何判断IOS设备是否是iPhoneX以上的设备呢?代码如下所示。

if(screen.height>=812){
   //iPhoneX系列的大高度设备
   location.href=“indexX.html”;
}

总结

相对来说,视频效果再原生开发过程中的情况还是比较复杂的,同学们在接触这类项目时,应该多积累具体问题的解决方案,这样才能触类旁通,让自己变成项目经验丰富的程序员。

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
APICloud平台常用技术点汇总详解
APICloud移动低代码开发平台介绍:使用APICloud可以开发移动APP、小程序、html5网页应用。如果要实现编写一套代码编译为多端应用(移动APP、小程序、html5),需使用avm.js框架进行开发。如果只开发APP,则可以使用前端技术(HTML5、Vue、react等)、avm.js进行开发,还可以使用模块商店大量的原生
Stella981 Stella981
3年前
JavaScript 核心原理精讲【朋友圈已刷屏】
作为一名前端工程师,JavaScript你一定每天都在用。但是,即便工作5年以上的前端也不一定用得非常熟,甚至很多前端对JavaScript的掌握程度仅仅停留在会用的层面。而且Vue/React等框架的便利,更是让前端人无需苦学JavaScript原生,就可以快速构建一个网页。它解决了开发者短期的痛点,却为依赖框架开发的程序员埋下长期隐
Stella981 Stella981
3年前
DCloud
ylbtechDCloudMUI:HellomuiMUI最接近原生App体验的前端框架1.返回顶部1、MUI最接近原生App体验的前端框架极小100k的js文件,60k的css文件。原生编写,不依赖任何三方框架极强xcode和Androidstudio里所有原生控件都具备高
Stella981 Stella981
3年前
Eclipse插件开发_学习_00_资源帖
一、官方资料 1.eclipseapi(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fhelp.eclipse.org%2Fmars%2Findex.jsp%3Ftopic%3D%252Forg.eclipse.platform.doc.isv%252Fguide%2
郑文 郑文
1年前
前端共学会:学习|成长|工作|职业,综合服务社区
前端共学会:学习|成长|工作|职业,综合服务社区download》quangneng.com/5021/一、前端共学会指的是什么前端共学会指的是一个由前端开发者组成的学习小组或社区,旨在通过互相学习、分享知识和经验,共同提升前端开发技能和水平。在前端共学会