本章的css可以说约等于没有,全是逻辑,仅供参考
html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UT
SEO靠我F-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=devic
SEO靠我e-width, initial-scale=1.0"><title>视频</title><link rel="stylesheet" href="index.css" />
</he
SEO靠我ad>
<body><div><video src="你的视频名称&路径.mp4" id="myVideo" onclick="player()"></video><div class
SEO靠我="timeStyle"></div></div>
</body>
<script src="index.js"></script>
</html>
首先SEO靠我你要获取到video元素
//全局变量
const myVideo = document.getElementById("myVideo")//video,获取到的是元素标签信息
这是一个点击事件,函数名为player
const player = () => {if(myVideo.paused){myVideo.play() //播放}else {myVideo.pause
SEO靠我() //暂停}
}
时间格式化函数
这是一个函数,函数名为JiSuanHMS
const JiSuanHMS = (time) => {if(time >= 60 * 60 *60){ /
SEO靠我/ 大于一小时//h:m:sh = time / 60 / 60^0 //^0:四舍五入整数化m = time / 60 % 60^0s = time % 60 % 60^0return h + :
SEO靠我+ m + : + s}else { //小于一小时//m:sm = time / 60 % 60^0s = time % 60 % 60^0return m + : + s}
}
即将SEO靠我播放事件函数(oncanplay)
本章只是配置时间和进度条,所以之后有的功能自行添加
//全局变量
//播放的时间元素标签获取,是个class
const timeSty
SEO靠我le = document.querySelector(".timeStyle")//time
获取视频总时间
video.duration //是一个浮点类型
SEO靠我 获取视频当前时间
video.currentTime//是一个浮点类型
myVideo.oncanplay = () => {const allTi
SEO靠我me = JiSuanHMS(myVideo.duration)const cTime = JiSuanHMS(myVideo.currentTime)timeStyle.innerHTML = `<
SEO靠我div>${cTime}/${allTime}</div>` //写入元素
}
暂停后将即将播放事件函数(onplaying)
我们这里先不做任何处理(你可以不写)
myVideo.onpl
SEO靠我aying = () => {//就是暂停后要播放时会调用// console.log(test)// console.log(myVideo.duration)
}
播放时事件函数(oSEO靠我nplay )
这个事件是在我们播放视频时调用。我们这里只是定义了一个定时器,每一秒去读取当前视频时间(currentTime)的值,至于总时间(duration)因为是innerHTML 重写,所以也SEO靠我要加上去
//定时器定义与初始值
let inter = null //全局变量
myVideo.onplay = () => {inter = setInterval
SEO靠我(()=>{const allTime = JiSuanHMS(myVideo.duration)const cTime = JiSuanHMS(myVideo.currentTime)timeSty
SEO靠我le.innerHTML = `<div>${cTime}/${allTime}</div>`},1000)
}
暂定时事件函数(onpause )
这个事件是在我们暂停视频时调用。这里我SEO靠我们的逻辑是暂停时我们取消定时器(停止获取)
myVideo.onpause = () => {console.log(pause)clearInterval(inter)inter = null
SEO靠我 }
视频时间更新事件函数(ontimeupdate)
这个事件在我们视频播放的时候就会被调用,停止视频后就不会调用
进度条显示
<div class="proessBox"><di
SEO靠我v id="proess"></div>
</div>
//需要获取到的元素(全局常量)
const proess = document.getEle
SEO靠我mentById(proess) //进度条元素
duration和currentTime的定义
myVideo.ontimeupdate = () => {// console.log(duration
SEO靠我:,myVideo.duration)// console.log(currentTime:,myVideo.currentTime)//console.log(myVideo.currentTime
SEO靠我/myVideo.duration)//0.00*****************,所以需要乘100proess.style.width = myVideo.currentTime/myVideo.d
SEO靠我uration*100 + %
}
.proessBox{
/*进度条全貌*/position: absolute;left: 0;top: 520p
SEO靠我x;width: 300px;height: 15px;background-color: red;display: flex;z-index: -1;/*最底*/
}
SEO靠我 #proess{position: absolute;left: 0;top: 0;height: 100%;background-color: skyblue;z-index: 5;/*比proe
SEO靠我ssBox高一些的*/
}
进度条拖拽
//proessBox是进度条的父级
//onmousedown: 鼠标点击事件
SEO靠我 proessBox.onmousedown = (event)=>{// console.log(event:,event.pageX) //关键// console.log(proess.cli
SEO靠我entWidth,proess.clientWidth)// console.log(proess.clientHeight:,proess.clientHeight)// console.log(p
SEO靠我roessBox.offsetWidth:,proessBox.offsetWidth)// console.log(proessBox.offsetHeight:,proessBox.offsetH
SEO靠我eight)// console.log(proessBox:,proessBox.offsetLeft) //0let len = event.pageX - proessBox.offsetLef
SEO靠我tlet percent = len / proessBox.offsetWidth;// console.log(percent)proess.style.width = percent * (pr
SEO靠我oessBox.offsetWidth) - 2 + "px";myVideo.currentTime = percent * myVideo.duration;
}
追加: 键盘事件
o
SEO靠我nkeydown: 键盘被按下onkeyup: 松开键盘的按键
重点是keyCode
使用的事件是window.onkeyup()
键盘空格键的ascii码
event.keyCode显示是32
if(even
SEO靠我t.keyCode === 32){//空格按下//播放暂停逻辑if(myVideo.paused){myVideo.play()}else {myVideo.pause()}
}
SEO靠我 键盘左箭头的ascii码
event.keyCode显示是37
逻辑是时间不能小于0和点击键盘的左箭头回退5秒
if(event.keyCode === 37){//左箭头:37let cT
SEO靠我ime = JiSuanHMS(myVideo.currentTime)if(myVideo.currentTime < 0){//if(cTime < 0:5){//cTime小于5秒(myVide
SEO靠我o.currentTime或者不能小于0)console.log(cTime)return}const returnTime = JiSuanHMS(myVideo.currentTime - 5)c
SEO靠我onsole.log(左箭头:,cTime,returnTime:,returnTime)myVideo.currentTime = myVideo.currentTime - 5cTime = Ji
SEO靠我SuanHMS(myVideo.currentTime)
}
键盘右箭头的ascii码
event.keyCode显示是39
逻辑是时间不能大于视频的最大时间和点击键盘的SEO靠我右箭头前进5秒
if(event.keyCode === 39){//右键头:39let cTime = JiSuanHMS(myVideo.currentTime)let allTime = JiSu
SEO靠我anHMS(myVideo.duration)if(myVideo.currentTime > myVideo.duration){//大于最大值console.log(cTime:,cTime,al
SEO靠我lTime:,allTime)return}const addTime = JiSuanHMS(myVideo.currentTime + 5)console.log(右箭头:,myVideo.cur
SEO靠我rentTime,addTime:,addTime)myVideo.currentTime = myVideo.currentTime + 5cTime = JiSuanHMS(myVideo.cur
SEO靠我rentTime)
}
完整代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8">
SEO靠我<meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-wid
SEO靠我th, initial-scale=1.0"><title>视频</title><link rel="stylesheet" href="index.css" />
</head>
SEO靠我 <body><div><video src="http://124.223.18.34:5555/static/video/djsy/djsy1/djsy1_1.mp4" id="myV
SEO靠我ideo" onclick="player()"></video><div class="timeStyle"></div><div class="proessBox"><div id="proess
SEO靠我"></div></div></div>
</body>
<script src="index.js"></script>
</html>
SEO靠我 .proessBox{position: absolute;left: 0;top: 520px;width: 900px;height: 15px;background-color: red;
SEO靠我display: flex;z-index: -1;
}
#proess{position: absolute;left: 0;top: 0;height: 100%;
SEO靠我background-color: skyblue;z-index: 5;
}
const myVideo = document.getElementById("my
SEO靠我Video")//video
const timeStyle = document.querySelector(".timeStyle")//time
const pr
SEO靠我oessBox = document.querySelector(.proessBox) //进度条元素
const proess = document.getElementById(
SEO靠我proess) //进度条元素let inter = null //定时器变量window.onload = () => {// console.log(myVideo)
}const
SEO靠我 player = () => {if(myVideo.paused){myVideo.play()}else {myVideo.pause()}
}//时间格式化函数(自定义)
SEO靠我 const JiSuanHMS = (time) => {if(time >= 60 * 60 *60){//h:m:sh = time / 60 / 60^0m = time / 60
SEO靠我% 60^0s = time % 60 % 60^0return h + : + m + : + s}else {//m:sm = time / 60 % 60^0s = time % 60 % 60
SEO靠我^0return m + : + s}
}//即将播放事件函数
myVideo.oncanplay = () => {const allTime = JiSuanHMS
SEO靠我(myVideo.duration)const cTime = JiSuanHMS(myVideo.currentTime)timeStyle.innerHTML = `<div>${cTime}/$
SEO靠我{allTime}</div>`
}//暂停后将即将播放事件函数
myVideo.onplaying = () => {// console.log(test)// c
SEO靠我onsole.log(myVideo.duration)
}//播放时事件函数
myVideo.onplay = () => {inter = setInterval(
SEO靠我()=>{const allTime = JiSuanHMS(myVideo.duration)const cTime = JiSuanHMS(myVideo.currentTime)timeStyl
SEO靠我e.innerHTML = `<div>${cTime}/${allTime}</div>`},1000)
}//暂定时事件函数
myVideo.onpause = (
SEO靠我) => {console.log(pause)clearInterval(inter)inter = null
}//视频时间更新事件函数
myVideo.ontim
SEO靠我eupdate = () => {// console.log(duration:,myVideo.duration)// console.log(currentTime:,myVideo.curre
SEO靠我ntTime)//console.log(myVideo.currentTime/myVideo.duration)//0.00*****************,所以需要乘100proess.sty
SEO靠我le.width = myVideo.currentTime/myVideo.duration*100 + %
}/* proess.onmousemove = function(ev
SEO靠我ent) {event = event || window.eventconsole.log(clientWidth:,event.clientWidth)console.log(clientHeig
SEO靠我ht,event.clientHeight)
} */proessBox.onmousedown = (event)=>{// console.log(event:,event.pag
SEO靠我eX) //关键// console.log(proess.clientWidth,proess.clientWidth)// console.log(proess.clientHeight:,pro
SEO靠我ess.clientHeight)// console.log(proessBox.offsetWidth:,proessBox.offsetWidth)// console.log(proessBo
SEO靠我x.offsetHeight:,proessBox.offsetHeight)// console.log(proessBox:,proessBox.offsetLeft) //0let len =
SEO靠我event.pageX - proessBox.offsetLeftlet percent = len / proessBox.offsetWidth;// console.log(percent)p
SEO靠我roess.style.width = percent * (proessBox.offsetWidth) - 2 + "px";myVideo.currentTime = percent * myV
SEO靠我ideo.duration;
}//定义键盘事件
window.onkeyup = (event) => {console.log(event.keyCode) //按
SEO靠我键的ascii码值if(event.keyCode === 32){//空格按下//播放暂停逻辑if(myVideo.paused){myVideo.play()}else {myVideo.paus
SEO靠我e()}}if(event.keyCode === 37){//左箭头:37let cTime = JiSuanHMS(myVideo.currentTime)if(myVideo.currentTi
SEO靠我me < 0){//小于5秒console.log(cTime)return}const returnTime = JiSuanHMS(myVideo.currentTime - 5)console.
SEO靠我log(左箭头:,cTime,returnTime:,returnTime)myVideo.currentTime = myVideo.currentTime - 5cTime = JiSuanHMS
SEO靠我(myVideo.currentTime)}if(event.keyCode === 39){//右键头:39let cTime = JiSuanHMS(myVideo.currentTime)let
SEO靠我 allTime = JiSuanHMS(myVideo.duration)if(myVideo.currentTime > myVideo.duration){//大于最大值console.log(
SEO靠我cTime:,cTime,allTime:,allTime)return}const addTime = JiSuanHMS(myVideo.currentTime + 5)console.log(右
SEO靠我箭头:,myVideo.currentTime,addTime:,addTime)myVideo.currentTime = myVideo.currentTime + 5cTime = JiSuan
SEO靠我HMS(myVideo.currentTime)}}
目前先到这个定义吧