本文简单介绍HTML5中的video标签,包括video元素的简单介绍、基本使用以及常用事件和属性。

一、标签介绍

HTML5 规定了一种通过 Video 元素来包含视频的标准方法。

Video标签用于在浏览器中提供视频控件来播放视频,示例为:<video src="movie.ogg" controls="controls"></video>,其中controls 属性提供添加播放暂停音量等控制,如果当前浏览器不支持video元素则显示video标签之间的内容。

video标签的主要属性

height 约束视频的高度。

src 规定要播放的视频的 URL。

autoplay 规定视频就绪后马上开始播放(自动播放视频)。

width 约束视频的宽度。(注意无法通过缩小视频的宽高来压缩视频

loop 规定当视频结束后将重新开始播放 , 如果设置该属性,则视频将循环播放。

preload 规定是否在页面加载后载入视频,如果设置了 autoplay 属性,则忽略该属性。

muted 规定视频的音频输出应该被静音,在高版本浏览器中,静音可以保证视频自动播放。

controls 规定浏览器应该为视频提供播放控件包括:播放 暂停 定位 音量 全屏切换 字幕等。

preload属性的取值有三种情况

auto - 当页面加载后载入整个视频

meta - 当页面加载后只载入元数据

none - 当页面加载后不载入视频

Video元素支持三种视频格式

Ogg = 带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件

WebM = 带有 VP8 视频编码和 Vorbis 音频编码的 WebM 文件

MPEG4 = 带有 H.264 视频编码和 AAC 音频编码的 MPEG 4 文件

Internet Explorer 8 不支持 video 元素

二、基本使用

video标签的使用方式相对简单,只需要在页面中指定位置插入video标签并设置必要的属性即可,下面给出一个简短的代码示例:

<video muted src="src/僵小鱼.mp4" autoplay="autoplay" width="600"  controls="controls">
您当前的浏览器不支持该控件,请升级浏览器!
</video>

说明 上面的代码会在页面中插入一个宽度为600的视频控件,src属性控制的是播放视频的资源路径,autoplay表示设置自动播放,controls表示为标签提供对用的播放控件,muted属性表示设置让视频静音(自动播放必须设置该属性)。

source 元素说明

video 元素允许多个 source 元素,source 元素可以链接不同的视频文件,浏览器将使用第一个可识别格式的文件,下面给出简短的代码示例。

<video width="320" height="240" controls="controls">
<source src="movie.ogg" type="video/ogg">
<source src="movie.mp4" type="video/mp4">
您的浏览器不支持当前控件!
</video>

三、属性、方法和事件

video元素同样拥有属性、方法和事件。

video元素的方法包括播放play()暂停pause()加载load()

video元素的属性包括是否静音(muted)是否自动播放(autoPlay)等,可以被读取或设置。

video元素相关的DOM 事件还能够帮我们监听视频音量改变(volumechange)播放结束(ended)等。

下面给出一个简短的代码示例,通过按钮可以来控制视频的播放、暂停和放大缩小。

<video src="src/僵小鱼.mp4" width="600px" id="my_video"></video>
<div class="control-video">
<button id="play_pause">播放</button>
<button id="make_big">放大</button>
<button id="make_small">缩小</button>
</div> <script>
var media = document.getElementById("my_video");
var playPauseBtn = document.getElementById("play_pause");
var makeBigBtn = document.getElementById("make_big");
var makeSmallBtn = document.getElementById("make_small"); playPauseBtn.onclick = function () {
if (media.paused)
{
this.innerHTML = "暂停";
media.play();
}else
{
this.innerHTML = "播放";
media.pause();
}
};
makeBigBtn.onclick = function () {
media.width += 50;
}; makeSmallBtn.onclick = function () {
media.width -= 50;
}
</script>

video元素的属性列表

readyState 当前状态

paused 是否暂停

controls 是否有默认控制条

currentSrc 当前资源的URL路径

src 设置或返回资源的URL

startTime 开始时间,通常为0

volume 音量,可以设置(0~1

ended 是否结束,布尔类型值

autoPlay 是否自动播放,布尔类型值

loop 是否循环播放,布尔类型值

muted 是否静音,布尔类型值,可以设置

error 错误信息,null表示正常

buffered 返回已缓冲区域,TimeRanges

seeking 是否正在seeking(查找)

currentTime 当前播放的位置,可以设置修改

duration 当前资源长度,流则返回无限

played 返回已经播放的区域,TimeRanges

seekable 返回可以seek的区域 TimeRanges

defaultPlaybackRate 默认的回放速度,可以设置

playbackRate 当前播放速度(比如可以设置为1.5倍速度),可以设置

error.code 错误信息,具体的代码 1-用户终止 2-网络错误 3-解码错误 4-URL无效

preload 是否预载资源 取值情况有 none:不预载 metadata:预载资源

networkState 当前网络状态,结果为数值 0-未初始化 1-未使用网络 2-正下载 3-没找到资源

TimeRanges 区域对象

TimeRanges.length 区域段数

TimeRanges.start(index) 第index段区域的开始位置

TimeRanges.end(index) 第index段区域的结束位置

video元素的方法列表

media.play();                播放视频
media.pause(); 暂停视频
media.load(); 重新加载src指定的资源
media.canPlayType(type); 是否能播放某种格式的资源

说明media为获取到的页面中的video标签

video元素相关的事件

var eventTester = function(e){
Media.addEventListener(e,function(){//.....},false);
} eventTester("loadstart"); 客户端开始请求数据
eventTester("progress"); 客户端正在请求数据
eventTester("suspend"); 延迟下载
eventTester("abort"); 客户端主动终止下载(不是因为错误引起)
eventTester("loadstart"); 客户端开始请求数据
eventTester("progress"); 客户端正在请求数据
eventTester("suspend"); 延迟下载
eventTester("abort"); 客户端主动终止下载(不是因为错误引起),
eventTester("error"); 请求数据时遇到错误
eventTester("stalled"); 网速失速
eventTester("play"); play()和autoplay开始播放时触发
eventTester("pause"); pause()触发
eventTester("loadedmetadata"); 成功获取资源长度
eventTester("loadeddata"); 成功获取数据信息
eventTester("waiting"); 等待数据,并非错误
eventTester("playing"); 开始回放
eventTester("canplay"); 可以播放,但中途可能因为加载而暂停
eventTester("canplaythrough"); 可以播放,歌曲全部加载完毕
eventTester("seeking"); 寻找中
eventTester("seeked"); 寻找完毕
eventTester("timeupdate"); 播放时间改变
eventTester("ended"); 播放结束
eventTester("ratechange"); 播放速率改变
eventTester("durationchange"); 资源长度改变
eventTester("volumechange"); 音量改变

前端开发系列039-基础篇之Video基础的更多相关文章

  1. 前端开发【第4篇:JavaScript基础】

    JavaScript简述 上一篇文章已经聊过JavaScript的历史了这里不再复述了直接切入正题,JavaScript是一门解释型.动态类型.弱类型语言. 解释型语言和编译型语言就类似看一本书,编译 ...

  2. openlayers5-webpack 入门开发系列一初探篇(附源码下载)

    前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...

  3. leaflet-webpack 入门开发系列一初探篇(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...

  4. 【Windows10 IoT开发系列】配置篇

    原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...

  5. [置顶]【实用 .NET Core开发系列】- 导航篇

    前言 此系列从出发点来看,是 上个系列的续篇, 上个系列因为后面工作的原因,后面几篇没有写完,后来.NET Core出来之后,注意力就转移到了.NET Core上,所以再也就没有继续下去,此是原因之一 ...

  6. 旨在脱离后端环境的前端开发套件 - IDT Server篇

    IDT,一个基于Nodejs的,旨在脱离后端环境的前端开发套件,目的就是能让前端开发完全脱离后端的环境,无论后端是什么模板引擎(主流),都能应付自如. IDT主要包括两大部分:Server + Bui ...

  7. 前端开发【第2篇:CSS】

    鸡血 样式的属性多达几千个,但别担心,按照80-20原则,常用的也就几十个,你完全可以掌握它. Css初识 HTML的诞生 早期只有HTML的时候为了让HTML更美观一点,当时页面的开发者会把颜色写到 ...

  8. openlayers4 入门开发系列之风场图篇

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  9. openlayers4 入门开发系列之热力图篇(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  10. Android Metro风格的Launcher开发系列第三篇

    前言: 各位小伙伴,又到了每周更新文章了时候了,本来是周日能发出来呢,这不是赶上清明节吗,女王大人发话了,清明节前两天半陪她玩,只留给我周一下午半天时间写博客,哪里有女王哪里就有压迫呀有木有!好了闲话 ...

随机推荐

  1. 函数组件的声明方式及差异+React.memo和userCallback区别

    1.函数组件的声明方式及差异 普通函数声明 箭头函数声明 使用React.FC类型(TypeScript专用) interface Props { content: string } // 写法一 c ...

  2. PACS千万家,好看耐用第一家---基于JAVA开发的跨平台PACS系统

    随着2011年成功上线全院级PACS,期间软件版本不断的更新和优化,也得到了不少HIS厂商及同行友商的支持,目前已有医院客户达到了300多家遍布全国各个省份,随着时间的推移,PACS老客户的数据量在不 ...

  3. 代码随想录第二十五天 | Leecode 491. 非递减子序列、46. 全排列、47. 全排列 II

    Leecode 491. 非递减子序列 题目描述 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 .你可以按 任意顺序 返回答案. 数组中可能含有重 ...

  4. (dify)如何使用dify自定义知识库【dify外部链接知识库】

    尝试dify自定义知识库 根据官网教程,可以从知识库的右上角外部知识库进行添加外部知识库 前往 "知识库" 页,点击右上角的 "外部知识库 API",轻点 &q ...

  5. 一些 DP 思维题

    最单纯的思维题就是想出来思路就会做,几乎没有实现难度的题.这种题 CF 与 Atcoder 比较多,这里集中记录一下. 对于 DP 而言,思维题只需要想出转移方程即可. CF1174E Ehab an ...

  6. 如何使用Flutter开发执行操作系统shell命令的工具

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  7. 网络编程:UDP connect连接

    UDP connect的作用 UDP connect函数的调用,并不会引起像TCP连接那样,和服务器目标端网络交互,并不会触发所谓的"握手"报文发送和应答. UDP套接字进行con ...

  8. 用C#将多个jpg合成一个pdf

    nuget安装iTextSharp: static void MergePDF(string picPath,string pdfPath) { string[] picFileNames=Direc ...

  9. Java从小白到老白⑥

    一. 1.抽象类vs接口 相同 两者都不能实例化,不能new操作 不同 抽象类abstract 接口interface 抽象类可以用部分方法实现 接口所有方法不能有实现 一个类只能继承(extends ...

  10. JAVAFx将后台报错信息导出到前台,方便用户联系技术人员

    Alert alert = new Alert(Alert.AlertType.ERROR);alert.setTitle("错误");alert.setHeaderText(&q ...