嵌入并控制一个视频播放器
请逐行逐词(主要指函数、参数、方法、属性之类的)讲解一下下面的代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>媒体播放时的方法</title>
<style>
h1 {
font-size: x-large;
margin: 6px 0px 6px 0px;
}
video {
max-width: 445px;
height:auto;
border: double 8px lightgray;
}
.videoContainer {
max-width: 445px;
margin:0 auto;
}
#positionBar {
height: 28px;
color:#333;
font-weight: bolder;
background: #33FFFF;
text-align: center;
}
#positionBar span {
display: inline-block;
margin-top: 7px;
}
#durationBar {
margin:0 auto;
border: solid 1px #333;
width: 60%;
margin-bottom: 5px;
box-shadow:15px 10px 30px #333;
}
#bufferBar {
background: lightsteelblue;
position: absolute;
}
.btn {
width:50%;
margin:0 auto;
margin-top:28px;
}
.btn button{
}
</style>
</head>
<body>
<div class="videoContainer">
<!-- timeupdate事件:当前播放位置(currentTime属性)改变 -->
<video id="videoPlayer" ontimeupdate="progressUpdate()" >
<source src="butterfly.mp4" type="video/mp4">
<source src="butterfly.webm" type="video/webm">
</video>
</div>
<div class="barContainer">
<div id="durationBar">
<div id="positionBar"><span id="displayStatus">进度条.</span></div>
</div>
</div>
<div class="btn">
<button onclick="play()">播放</button>
<button onclick="pause()">暂停</button>
<button onclick="stop()">停止</button>
<button onclick="speedUp()">加速播放</button>
<button onclick="slowDown()">减速播放</button>
<button onclick="normalSpeed()">正常速度</button>
</div>
</body>
<script>
var video;
var display;
window.onload = function() {
video = document.getElementById("videoPlayer");//获取videoPlayer元素
display = document.getElementById("displayStatus");
video.onplaying = function() {
//alert(1);
}
video.onpause = function() {
display.innerHTML = "暂停";
}
}
//进程更新函数
//currentTime属性自然改变,触发ontimeupdate事件
// 1. 获取视频的当前时间点,将它保存在currentTime属性中
// 2.(当前时间点/视频的总的播放时间)保存到durantion属性中
// 3. 转换为#positionBar 百分比长度。
// 时间变化显示于进度条中:
function progressUpdate() {
var positionBar = document.getElementById("positionBar");
//currentTime--当前的播放位置
//duration--媒介时长
//(video.currentTime / video.duration * 100)得到一个浮点数
//即: positionBar.style.width=百分数,它 长度是相对于#durationBar而言的
positionBar.style.width = (video.currentTime / video.duration * 100) + "%";//播放时进度条的宽
displayStatus.innerHTML = (Math.round(video.currentTime*100)/100) ;//播放时进度条的文字
}
function play() {//播放函数
video.play();
}
function pause() {
video.pause();
}
//currentTime人为地改变当前播放位置改变,触发timeUpdate事件
function stop() {
video.pause();
video.currentTime = 0;
}
function speedUp() {
video.play();
video.playbackRate = 2;
}
function slowDown() {
video.play();
video.playbackRate = 0.5;
}
function normalSpeed() {
video.play();
video.playbackRate = 1;
}
</script>
</html>这段代码是一个简单的 HTML 页面结构,用于嵌入并控制一个视频播放器。下面逐行逐词进行讲解:
<body>
<body>标签定义了 HTML 文档的主体部分,所有可见内容都应包含在该标签内。
<div class="videoContainer">
<div>是一个通用容器标签,用于对文档进行分组。class="videoContainer"给这个 div 设置了一个 CSS 类名,便于后续通过样式表进行样式设置。
<!-- timeupdate事件:当前播放位置(currentTime属性)改变 -->
这是一段 HTML 注释,说明了
timeupdate事件的作用:当视频播放位置改变时触发(即currentTime属性发生变化时)。
<video id="videoPlayer" ontimeupdate="progressUpdate()" >
<video>是 HTML5 中用于嵌入视频内容的标签。id="videoPlayer"为该视频元素指定唯一标识符,方便 JavaScript 调用。ontimeupdate="progressUpdate()"是一个事件处理器,表示当timeupdate事件发生时,将调用名为progressUpdate()的 JavaScript 函数。
<source src="butterfly.mp4" type="video/mp4">
<source>标签用于指定多个视频源文件,浏览器会根据支持情况选择使用哪个文件。src="butterfly.mp4"指定视频文件路径。type="video/mp4"指定视频格式为 MP4。
<source src="butterfly.webm" type="video/webm">
同上,提供另一个视频源文件,格式为 WebM。
</video>
结束
<video>标签。
</div>
结束
videoContainerdiv。
<div class="barContainer">
另一个容器 div,用于包裹进度条相关元素。
<div id="durationBar">
定义一个用于显示视频总时长的容器。
<div id="positionBar"><span id="displayStatus">进度条.</span></div>
嵌套的 div 和 span 元素,用于展示当前播放进度和状态信息。
id="positionBar"表示当前播放位置的条形区域。<span id="displayStatus">进度条.</span>是一个内联容器,用于显示文字提示,如“进度条”。
</div></div>
结束
durationBar和barContainerdiv。
<div class="btn">
定义一个按钮容器,用于放置控制按钮。
<button onclick="play()">播放</button>
<button>创建一个按钮。onclick="play()"表示点击按钮时调用play()函数,用于播放视频。
<button onclick="pause()">暂停</button>
类似地,点击此按钮调用
pause()函数,用于暂停视频。
<button onclick="stop()">停止</button>
点击此按钮调用
stop()函数,用于停止视频播放。
<button onclick="speedUp()">加速播放</button>
点击此按钮调用
speedUp()函数,用于加快视频播放速度。
<button onclick="slowDown()">减速播放</button>
点击此按钮调用
slowDown()函数,用于减慢视频播放速度。
<button onclick="normalSpeed()">正常速度</button>
点击此按钮调用
normalSpeed()函数,用于恢复视频的正常播放速度。
</div>
结束
btndiv。
</body>
结束
<body>标签。
整体来看,这段代码构建了一个基础的 HTML 视频播放器界面,包含播放控制按钮和进度条显示区域,但未包含实际的 JavaScript 实现逻辑。
下面是js代码逻辑讲解:
<script>
var video;
var display;
window.onload = function() {
video = document.getElementById("videoPlayer");//获取videoPlayer元素
display = document.getElementById("displayStatus");
video.onplaying = function() {
//alert(1);
}
video.onpause = function() {
display.innerHTML = "暂停";
}
}
//进程更新函数
//currentTime属性自然改变,触发ontimeupdate事件
// 1. 获取视频的当前时间点,将它保存在currentTime属性中
// 2.(当前时间点/视频的总的播放时间)保存到durantion属性中
// 3. 转换为#positionBar 百分比长度。
// 时间变化显示于进度条中:
function progressUpdate() {
var positionBar = document.getElementById("positionBar");
//currentTime--当前的播放位置
//duration--媒介时长
//(video.currentTime / video.duration * 100)得到一个浮点数
//即: positionBar.style.width=百分数,它 长度是相对于#durationBar而言的
positionBar.style.width = (video.currentTime / video.duration * 100) + "%";//播放时进度条的宽
displayStatus.innerHTML = (Math.round(video.currentTime*100)/100) ;//播放时进度条的文字
}
function play() {//播放函数
video.play();
}
function pause() {
video.pause();
}
//currentTime人为地改变当前播放位置改变,触发timeUpdate事件
function stop() {
video.pause();
video.currentTime = 0;
}
function speedUp() {
video.play();
video.playbackRate = 2;
}
function slowDown() {
video.play();
video.playbackRate = 0.5;
}
function normalSpeed() {
video.play();
video.playbackRate = 1;
}
</script>下面详细讲解:
var video; var display;
定义两个全局变量 `video` 和 `display`,用于存储视频元素和显示状态的元素引用。
window.onload = function() {当页面完全加载完成后执行函数。
video = document.getElementById("videoPlayer");//获取videoPlayer元素使用
document.getElementById()方法获取 ID 为 "videoPlayer" 的 HTML 元素(即<video>标签),并将其赋值给全局变量video。
display = document.getElementById("displayStatus");获取 ID 为 "displayStatus" 的 HTML 元素(即
<span>标签),并将其赋值给全局变量display。
video.onplaying = function() {
//alert(1);
}为视频元素设置
onplaying事件处理器,当视频开始播放时触发。当前代码中注释掉了一个 alert 调用。
video.onpause = function() {
display.innerHTML = "暂停";
}为视频元素设置
onpause事件处理器,当视频暂停时触发,将显示状态元素的 HTML 内容设置为 "暂停"。
}
结束
window.onload函数。
//进程更新函数 //currentTime属性自然改变,触发ontimeupdate事件
注释说明:进度更新函数,当
currentTime属性自然改变时触发ontimeupdate事件。
// 1. 获取视频的当前时间点,将它保存在currentTime属性中 // 2.(当前时间点/视频的总的播放时间)保存到durantion属性中 // 3. 转换为#positionBar 百分比长度。 // 时间变化显示于进度条中:
详细注释说明进度条更新的逻辑步骤。
function progressUpdate() {定义名为
progressUpdate的函数,用于更新播放进度。
var positionBar = document.getElementById("positionBar");获取 ID 为 "positionBar" 的 HTML 元素(即进度条),并将其赋值给局部变量
positionBar。
//currentTime--当前的播放位置 //duration--媒介时长 //(video.currentTime / video.duration * 100)得到一个浮点数 //即: positionBar.style.width=百分数,它 长度是相对于#durationBar而言的
注释说明:
currentTime表示当前播放位置,duration表示视频总时长,计算结果为百分比。
positionBar.style.width = (video.currentTime / video.duration * 100) + "%";//播放时进度条的宽
设置
positionBar元素的宽度为当前播放位置占总时长的百分比,实现进度条动态更新。
displayStatus.innerHTML = (Math.round(video.currentTime*100)/100) ;//播放时进度条的文字
将当前播放时间显示在进度条文字区域,使用
Math.round()四舍五入到小数点后两位。
}
结束
progressUpdate函数。
function play() {//播放函数
video.play();
}定义
play函数,调用视频元素的play()方法开始播放视频。
function pause() {
video.pause();
}定义
pause函数,调用视频元素的pause()方法暂停播放视频。
//currentTime人为地改变当前播放位置改变,触发timeUpdate事件
注释说明:通过人为改变
currentTime属性来改变播放位置并触发timeUpdate事件。
function stop() {
video.pause();
video.currentTime = 0;
}定义
stop函数,先暂停视频,然后将currentTime属性设置为 0,实现停止功能。
function speedUp() {
video.play();
video.playbackRate = 2;
}定义
speedUp函数,先播放视频,然后将playbackRate属性设置为 2,实现加速播放。
function slowDown() {
video.play();
video.playbackRate = 0.5;
}定义
slowDown函数,先播放视频,然后将playbackRate属性设置为 0.5,实现减速播放。
function normalSpeed() {
video.play();
video.playbackRate = 1;
}定义
normalSpeed函数,先播放视频,然后将playbackRate属性设置为 1,实现正常播放速度。
}
结束整个 JavaScript 代码块。