HTML5 <video> 标签属性、API 方法、事件、自定义样式详解与实用示例

在这里插入图片描述

HTML5 <video> 标签为网页内嵌视频提供了强大且便捷的功能。以下是对 <video> 标签的主要属性、API 方法、事件、自定义样式及其使用示例的详细介绍:

一、属性

1. src

  • 定义:指定视频文件的 URL。
  • 示例:
    <video src="my_video.mp4"></video>
    

2. controls

  • 定义:当设置此属性时,浏览器会显示内置的播放控制(如播放/暂停按钮、音量控制、全屏切换等)。
  • 示例:
    <video src="my_video.mp4" controls></video>
    

3. widthheight

  • 定义:设置视频播放器的宽高(以像素为单位)。
  • 示例:
    <video src="my_video.mp4" width="640" height="360"></video>
    

4. poster

  • 定义:指定视频加载时显示的封面图片 URL。
  • 示例:
    <video src="my_video.mp4" poster="video_cover.jpg"></video>
    

5. autoplay

  • 定义:如果设置,视频将在页面加载后自动开始播放。
  • 示例:
    <video src="my_video.mp4" autoplay></video>
    

6. loop

  • 定义:当设置时,视频会在播放结束后自动重头开始。
  • 示例:
    <video src="my_video.mp4" loop></video>
    

7. muted

  • 定义:设置视频初始为静音状态。
  • 示例:
    <video src="my_video.mp4" muted></video>
    

8. preload

  • 定义:指示浏览器如何预先加载视频数据。可选值有:
    • none:不预加载视频数据。
    • metadata:仅预加载视频元数据(如时长、尺寸)。
    • auto:尽可能多地预加载视频内容。
  • 示例:
    <video src="my_video.mp4" preload="metadata"></video>
    

9. crossorigin

  • 定义:指定视频是否应该以 CORS 方式加载。这对于需要访问视频帧数据的跨域视频至关重要。可选值有:
    • anonymous:请求不包含凭据。
    • use-credentials:请求包含凭据(如 cookie、HTTP 认证等)。
  • 示例:
    <video src="https://other-domain.com/my_video.mp4" crossorigin="anonymous"></video>
    

10. controlslist

HTML5 的 <video> 标签提供了丰富的媒体播放功能,其中 controlslist 属性允许开发者精细控制浏览器提供的默认视频控件中显示或隐藏的特定组件,以适应不同的用户体验需求或设计要求。以下是关于 controlslist 属性的详细说明:

controlslist 属性可以直接应用于 <video> 元素。要启用它,只需在 HTML 代码中的 <video> 标签中添加 controlslist 属性,并设置其值为一个空格分隔的控件列表。例如:

<video src="my_video.mp4" controls controlslist="nodownload noplaybackrate">

10.1. 可用值

controlslist 支持以下值,这些值可单独使用或组合使用:

  • nodownload:阻止显示下载按钮,防止用户直接下载视频文件。这有助于保护视频内容的版权或限制离线访问。

  • nofullscreen:禁止全屏模式按钮的显示,防止用户将视频切换到全屏观看。

  • noremoteplayback(或 disableremoteplayback):禁用远程播放选项,如在连接到同一网络的其他设备(如智能电视)上投射或播放视频。

  • noplaybackrate:移除播放速度控制器,用户将不能调整视频的播放速率(如快进、慢放或倒带)。

  • nokeyboard(实验性,非标准):在某些浏览器中,可能用于隐藏键盘快捷键提示或禁止通过键盘操作视频控件。

请注意,不是所有浏览器都完全支持所有的 controlslist 值,尤其是在 nokeyboard 这种较新或实验性的特性上。对于广泛支持的值(如 nodownloadnofullscreennoremoteplaybacknoplaybackrate),现代浏览器通常会遵循这些指示。

10.2. 默认行为与覆盖

默认情况下,如果仅使用 controls 属性而未指定 controlslist,浏览器将显示一组完整的标准控件,包括播放/暂停按钮、进度条、音量控制、全屏按钮、下载按钮(如果支持),以及可能的播放速度控制器。

当指定了 controlslist 并包含否定属性(如 nodownload),浏览器会相应地隐藏或禁用指定的控件。例如,如果希望仅显示基本的播放/暂停、进度条和音量控制,同时禁止下载、全屏和播放速度调整,可以这样设置:

<video src="my_video.mp4" controls controlslist="nodownload nofullscreen noplaybackrate">

10.3. 浏览器兼容性

虽然 controlslist 是 HTML5 规范的一部分,但实际支持情况可能因浏览器版本不同而有所差异。一些较新的或实验性的功能(如 nokeyboard)可能只有在特定浏览器或特定版本中才能使用。在实际应用时,建议查阅最新的浏览器兼容性数据,确保所使用的 controlslist 值在目标用户群体的主流浏览器中得到良好支持。

10.4. 替代方案

对于不被所有浏览器广泛支持的 controlslist 值,或者为了实现更定制化的视频播放器外观与功能,开发者可以选择使用第三方 JavaScript 库或自定义 CSS/JavaScript 来创建完全自定义的视频控件界面。这种情况下,可以移除 controls 属性并自行编写交互逻辑,从而实现对视频播放器的完全控制。

总结来说,HTML5 <video> 标签的 controlslist 属性提供了一种简便的方法来定制浏览器默认视频控件的显示内容,允许开发者根据项目需求隐藏特定功能以增强内容保护或优化用户界面。在使用时应注意浏览器兼容性,并在必要时结合自定义代码实现更复杂的播放器定制。

二、API 方法

1. play()

  • 定义:开始或恢复视频播放。
  • 示例(JavaScript):
    const videoElement = document.querySelector('video');
    videoElement.play();
    

2. pause()

  • 定义:暂停视频播放。
  • 示例(JavaScript):
    const videoElement = document.querySelector('video');
    videoElement.pause();
    

3. load()

  • 定义:重新加载视频源。通常在更改 src 属性或需要刷新视频状态时调用。
  • 示例(JavaScript):
    const videoElement = document.querySelector('video');
    videoElement.src = 'new_video.mp4';
    videoElement.load();
    

4. currentTime

  • 定义:获取或设置当前视频播放的时间位置(以秒为单位)。
  • 示例(JavaScript):
    const videoElement = document.querySelector('video');// 获取当前播放时间
    let currentTime = videoElement.currentTime;// 跳转到指定时间
    videoElement.currentTime = 30;  // 秒
    

5. duration

  • 定义:获取视频的总时长(以秒为单位)。
  • 示例(JavaScript):
    const videoElement = document.querySelector('video');
    let totalDuration = videoElement.duration;
    

6. volume

  • 定义:获取或设置视频的音量。取值范围为 0.0(静音)至 1.0(最大音量)。
  • 示例(JavaScript):
    const videoElement = document.querySelector('video');// 获取当前音量
    let currentVolume = videoElement.volume;// 设置音量
    videoElement.volume = 0.5;  // 一半音量
    

7. playbackRate

  • 定义:获取或设置视频的播放速率。大于 1.0 表示加速播放,小于 1.0 表示慢速播放,1.0 为正常速度。
  • 示例(JavaScript):
    const videoElement = document.querySelector('video');// 获取当前播放速率
    let playbackRate = videoElement.playbackRate;// 设置播放速率
    videoElement.playbackRate = 1.5;  // 1.5 倍速播放
    

三、事件

1. play

  • 定义:当视频开始或恢复播放时触发。
  • 示例(JavaScript):
    const videoElement = document.querySelector('video');
    videoElement.addEventListener('play', function () {console.log('Video is now playing.');
    });
    

2. pause

  • 定义:当视频暂停时触发。
  • 示例(JavaScript):
    const videoElement = document.querySelector('video');
    videoElement.addEventListener('pause', function () {console.log('Video has been paused.');
    });
    

3. ended

  • 定义:当视频播放到达结尾时触发。
  • 示例(JavaScript):
    const videoElement = document.querySelector('video');
    videoElement.addEventListener('ended', function () {console.log('Video has finished playing.');
    });
    

4. timeupdate

  • 定义:当当前播放时间发生变化时频繁触发。
  • 示例(JavaScript):
    const videoElement = document.querySelector('video');
    videoElement.addEventListener('timeupdate', function () {console.log('Current time:', videoElement.currentTime);
    });
    

5. error

  • 定义:当视频加载或播放过程中发生错误时触发。
  • 示例(JavaScript):
    const videoElement = document.querySelector('video');
    videoElement.addEventListener('error', function (event) {console.error('An error occurred:', event);
    });
    

四、多源支持

为了兼容不同的浏览器对视频编码格式的支持,可以使用 <source> 标签提供多个视频源。浏览器会自动选择第一个能成功加载和播放的源:

<video controls><source src="my_video.mp4" type="video/mp4"><source src="my_video.webm" type="video/webm"><source src="my_video.ogv" type="video/ogg">Your browser does not support the video tag.
</video>

五、自定义 video controlslist 的布局与样式

在使用 video 原生 controlslist 情况下,自定义 video controlslist 的布局与样式,实际上就是通过 原生 JavaScript 以及 Css 对 video controlslist 标签 DOM 样式或内容进行自定义修改。当然,也可以隐藏原生的controlslist,通过调用 video 相关 API 创建新的自定义controlslist 的布局与样式。

1、开启 shadow DOM

在Chrome浏览器中打开开发者调试工具-设置-Elements:勾选如图当中的 Show user agent shadow DOM。

在这里插入图片描述
然后再去审查Video元素,就能够看到如图当中的 dom 结构。

在这里插入图片描述

2、样式修改

通过CSS 修改 videco controlslist 伪类的 属性可以修改controlslist 的样式。

请注意,这些样式可能需要特定的前缀,并且随着浏览器更新,其内部结构可能发生变化,导致上述代码失效。

3、内容修改

可以通过原生 JavaScript 可以修改 videco controlslist 的内容显示。

综上所述,HTML5 <video> 标签提供了丰富的属性、API 方法以及事件支持,使得开发者可以轻松地在网页中嵌入视频内容,并对其进行精细控制和交互处理。通过合理运用这些功能,可以创建出具有良好用户体验的多媒体网页。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/824602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++杂货铺】继承

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 继承的概念和定义 &#x1f4c2; 概念 &#x1f4c2; 定义 &#x1f4c1; 基类和派生类对象赋值转换 &#x1f4c1; 继承中的作用域 &#x1f4c1; 派生类的默认成员函数 构造函数 析构函数 拷贝构造函数 赋值重载…

有公网IP,如何设置端口映射实现访问?

很多中小型公司或个人会根据自身需求自建服务器&#xff0c;或者将自己内网的服务、应用发布到外网&#xff0c;实现异地访问&#xff0c;如远程桌面、网站、数据库、公司的管理系统、FTP、管家婆、监控系统等等。 没接触过的人可能会觉得这个很难&#xff0c;实际上使用快解析…

Golang插件系统实现

插件可以在解耦的基础上灵活扩展应用功能&#xff0c;本文介绍了如何基于Golang标准库实现插件功能&#xff0c;帮助我们构建更灵活可扩展的应用。原文: Plugins with Go 什么是插件 简单来说&#xff0c;插件就是可以被其他软件加载的软件&#xff0c;通常用于扩展应用程序的功…

[入门]测试层级-ApiHug准备-测试篇-005

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace 这里的测…

学习STM32第十五天

SPI外设 一、简介 STM32F4XX内部集成硬件SPI收发电路&#xff0c;可以由硬件自动执行时钟生成、数据收发等功能&#xff0c;减轻CPU负担&#xff0c;可配置8位/16位数据帧&#xff0c;高位&#xff08;最常用&#xff09;/低位先行&#xff0c;三组SPI接口&#xff0c;支持DMA…

第一篇【传奇开心果系列】我和AI面对面聊编程:深度比较PyQt5和tkinter.ttk

传奇开心果系列博文 系列博文目录我和AI面对面聊编程系列 博文目录前言一、今天我们面对广大读者选择PyQt5和tkinter.ttk做比较这个话题目的是什么&#xff1f;二、举一个最简单的pyqt5信号和插槽的例子三、这和tkinter的点击事件有什么区别&#xff1f;四、如何选择&#xff1…

MySQL Explan执行计划详解

Explan执行计划 首先我们采用explan执行计划 执行一条sql&#xff0c;发现返回了12个列&#xff0c;下面会详细解释每一列 1、ID列 id列的值是代表了select语句执行顺序&#xff0c;是和select相关联的&#xff1b;id列的值大的会优先执行&#xff0c;如果id列为空最后执行&a…

数据库的创建

数据库分类 通过查看对象资源管理器来区分数据库类型 数据库物理文件的组成 : 数据库文件 日志文件 创建一个主数据文件和一个日志文件

上线流程及操作

上节回顾 1 搜索功能-前端&#xff1a;搜索框&#xff0c;搜索结果页面-后端&#xff1a;一种类型课程-APIResponse(actual_courseres.data.get(results),free_course[],light_course[])-搜索&#xff0c;如果数据量很大&#xff0c;直接使用mysql&#xff0c;效率非常低--》E…

淘宝商品数据抓取新策略:API接口助力获取标题、分类与店铺名

随着电子商务的迅猛发展&#xff0c;淘宝作为中国最大的网络购物平台&#xff0c;其商品数据对于众多商家、研究者和市场分析师来说具有极高的价值。然而&#xff0c;如何高效、准确地抓取淘宝商品数据&#xff0c;尤其是商品标题、分类和店铺名等关键信息&#xff0c;一直是一…

nginx部署上线

1. windows配置nginx 打包命令 npm run build:prod 1. 安装 nginx mac windows 2. mac / windows 环境下ngnix部署启动项目 2. nginx 解决 history 的 404 问题 3. nginx配置代理解决生产环境跨域问题

极速、易用、高度定制化的开源社区交流平台:Flarum

Flarum&#xff1a;轻盈高效&#xff0c;引领未来社区互动新风尚的革命性论坛平台- 精选真开源&#xff0c;释放新价值。 概览 Flarum是一款精心打造的现代网站讨论平台&#xff0c;以其精炼高效而著称。作为 esoTalk 和 FluxBB 的理念和技术的集大成者&#xff0c;Flarum 致力…

Ubuntu 20.04 LTS 在3588安卓主板上测试yolov8-1.0版本的yolov8n-seg模型

0. 创建虚拟环境 #!< 创建虚拟环境yolov8 $ sudo pip install virtualenv $ sudo pip install virtualenvwrapper $ mkvirtualenv yolov8 -p /usr/bin/python3.81. 将yolov8n-seg.pt转换为yolov8n-seg.onnx文件 #!< 创建项目目录yolov8-rknn并下载yolov8n-seg.pt模型文…

虚拟机vm桥接模式linux(centos,ubuntu)联网

台式机网线 查看宿主机网络 编辑虚拟机—>虚拟网络编辑器–>更改设置 选择&#xff0c;确定 进入linux系统 输入ip addr找到自己的网卡 我的是eno16777736 centos&#xff1a; 编辑 HWADDR"00:0C:29:54:CE:B8" TYPE"Ethernet" BOOTPROTO"…

公网IP多少钱可以购买?

公网IP是指可以在全球范围内访问和识别的唯一IP地址。对于许多企业和个人用户来说&#xff0c;公网IP是实现远程访问、搭建服务器、建立安全连接等重要需求的基础。公网IP的获取并不是免费的&#xff0c;并且价格因供应商和地区而异。 现有公网IP市场 当前&#xff0c;市场上有…

博弈论和sg函数

Nim游戏 题目链接&#xff1a;Nim游戏 先说结论&#xff1a;假设n堆石子&#xff0c;石子数分别为a1,a2,a3.....&#xff0c;则当a1^a2^a3^...^an0时先手必败&#xff0c;否则先手必胜。 因为所表示的二进制位必定是成对出现的&#xff0c;根据性质 1 ^ 1 0 &#xff0c;0 …

深入理解 pytest Fixture 方法及其应用

当涉及到编写自动化测试时&#xff0c;测试框架和工具的选择对于测试用例的设计和执行非常重要。在Python 中&#xff0c;pytest是一种广泛使用的测试框架&#xff0c;它提供了丰富的功能和灵活的扩展性。其中一个很有用的功 能是fixture方法&#xff0c;它允许我们初始化测试环…

HTML5漫画风格个人介绍源码

源码介绍 HTML5漫画风格个人介绍源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 效果截图 源码下载 HTML5漫画风格…

设计模式———单例模式

单例也就是只能有一个实例&#xff0c;即只创建一个实例对象&#xff0c;不能有多个。 可能会疑惑&#xff0c;那我写代码的时候注意点&#xff0c;只new一次不就得了。理论上是可以的&#xff0c;但在实际中很难实现&#xff0c;因为你无法预料到后面是否会脑抽一下~~因此我们…

【Pytorch】Conv1d

conv1d 先看看官方文档 再来个简单的例子 import torch import numpy as np import torch.nn as nndata np.arange(1, 13).reshape([1, 4, 3]) data torch.tensor(data, dtypetorch.float) print("[data]:\n", data) conv nn.Conv1d(in_channels4, out_channels1…