video标签知多少

视频对于现在的web来说已经见怪不怪了,如何在web上播放视频呢?有请我们今天的主角video标签

用法

html 复制代码
<video controls>
    <source type="video/mp4" src="url of mp4 video">
    您的当前设备不支持video标签
</video>

默认效果如下:

支持的内容情况

我们都知道视频格式有很多,但是很不幸,目前video标签只支持3种视频格式,分别是"mp4"、"webm"、"ogg"。

video标签常用属性介绍

属性 描述
autoplay 控制视频是否自动播放
controls 控制视频是否显示控件
height 控制视频播放器的高度
width 控制视频播放器的宽度
loop 控制视频是否循环播放

source标签常用属性介绍

属性 描述
src 视频的地址
type 视频的类型。可选值:"video/mp4"、"video/ogg"、"video/webm"

设置播放器的样式

自己准备一个mp4类型的视频,然后将它嵌入到我们的video标签里,同时给标签设置样式如下:

css 复制代码
video {
    margin-top: 100px;
    margin-left: 500px;
    width: 500px;
}
html 复制代码
<video controls>
    <source src="视频地址" type="video/mp4">
</video>

如果不出意外的话,目前是下面这样的:

但是如果我们同时设置了高度,高度800px或者100px,或者是不成比例的设置,那么就会出现不协调的现象,比如下面:

出现这种不协调的问题其实很好解释,因为视频本身也是由很多张图片组成的嘛。当我们给图片设置"怪异比例"的时候,图片可能会出现压缩、伸长、或者大片的黑色部分。

如何让视频内容占满指定的宽度和高度呢?

我们一般是给video标签外套一个div元素,然后同时给video标签的宽度和高度都设置100%,并且将object-fit属性值设置为"fill"。

html 复制代码
<style>
    div {
        width: 500px;
        height: 600px;
    }
    video {
        height: 100%;
        width: 100%;
        object-fit: fill;
    }
</style>
<div>
    <video controls>
        <source type="video/mp4" src="...">
    </video>
</div>

我们再来看一下,视频设置前后的样式对比:

设置前的样式如下:

设置后的样式如下:

我们可以看到,视频内容现在是占满宽高了,但此时的问题也明显了,视频变形了。

video标签常用事件介绍

属性 描述
loadstart 当浏览器开始查找视频时触发
durationchange 当视频的时长已更改时触发
loadedmetadata 当浏览器已加载视频的元数据时触发。元数据是指:视频的时长+视频的尺寸+文本轨道
loadeddata 当浏览器已加载视频的当前帧时触发
progress 当浏览器正在下载视频时触发
canplay 当浏览器可以开始播放视频时触发
waiting 当视频由于需要缓冲下一帧而停止时触发

video标签常用方法介绍

重新加载视频

html 复制代码
<video controls>
    <source type="" src="...">
</video>

<script>
    setTimeout(function(){
        document.querySelector('video').load();
    }, 3000);
</script>

播放视频

html 复制代码
<video controls>
    <source type="" src="...">
</video>

<script>
    setTimeout(function(){
        document.querySelector('video').play();
    }, 3000);
</script>

视频暂停播放

html 复制代码
<video controls>
    <source type="" src="...">
</video>

<script>
    setTimeout(function(){
        // 开启播放
        document.querySelector('video').play();
    }, 2000);
    
    setTimeout(function(){
        // 暂停播放
        document.querySelector('video').pause();
    }, 3000);
</script>

视频进入全屏模式

我们可以通过 FullScreen API来完成这个功能。对video标签使用这些方法有几点需要注意:

  • 当video标签加载完毕后,才可以调用 FullScreen API。
  • FullScreen API 存在兼容性问题,需要在前面加上各自浏览器内核的前缀。
  • 想要实现video标签放大的功能有下面几种方式:

1、使用原生的API。requestFullscreen(非ios可用)、webkitEnterFullScreen(ios可用)。这里需要动态判断你的设备支持哪种API。

2、使用 css+js 来完成假全屏。

html 复制代码
<video controls>
    <source type="" src="...">
</video>

<button>视频放大</button>

<script>
    function videoLarge(){
        let video = document.querySelector('video');
        if (video.requestFullscreen){
            // 非ios
            video.requestFullscreen();
        } else if (video.webkitEnterFullScreen){
            // ios
            video.webkitEnterFullScreen();
        }
    }
</script>
相关推荐
尾善爱看海4 小时前
Vue 面试收官篇:SSR、性能优化落地、30 道高频面试题精讲(附标准答案)
前端·javascript·vue.js·面试·vue
驳是4 小时前
一个组件,提升 react-router 开发的幸福感
前端·preact
GreenTea5 小时前
OpenAI Agents API 上手实测:一次调用把整个 agent loop 甩给 OpenAI
前端·后端·算法
星云API技术支持5 小时前
企业微信二次开发:群权限设置、成员管理与群资料维护的接口组合实践
java·前端·企业微信
京东云开发者5 小时前
81.8 秒的视频,我们改了 15 个版本:一次纯 Codex 驱动的 AI-native 视频实践
前端·aigc
Csvn6 小时前
TypeScript 大型项目架构:从单体 tsconfig 到分层可扩展的工程
前端
计算机魔术师7 小时前
Dario Amodei 发文呼吁为前沿 AI 降速并提出三点计划
前端
计算机魔术师7 小时前
OpenAI的AI代理偷偷给RubyGems下毒,我们却毫无察觉
前端
甲维斯8 小时前
0代码,0建模,3句话开发一个3D游戏!
前端·游戏·游戏开发
IT_陈寒8 小时前
Vue的响应式更新把我坑惨了,原来问题出在这
前端·人工智能·后端