JS實(shí)現(xiàn)簡(jiǎn)單控制視頻播放倍速的實(shí)例代碼
引言
之前就發(fā)現(xiàn)一個(gè)問(wèn)題:有時(shí)候看一些學(xué)習(xí)視頻,總是嫌它動(dòng)作太慢,老師黑板上寫(xiě)板書(shū)很浪費(fèi)時(shí)間,要是控制合適倍速播放,這樣既能提升學(xué)習(xí)效率,也能讓自己看著舒服點(diǎn)。所以我就學(xué)著寫(xiě)了下面這個(gè)網(wǎng)頁(yè),通過(guò)Html+CSS+JavaScript實(shí)現(xiàn)。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、成品效果

二、具體實(shí)現(xiàn)
1.HTML+CSS實(shí)現(xiàn)簡(jiǎn)單布局
代碼如下(示例):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css" rel="external nofollow" >
<title>視頻播放</title>
</head>
<body>
<div id="wrapper">
<video width="765" height="430" src="http://clips.vorwaerts-gmbh.de/VfE_html5.mp4" controls class="flex"></video>
<div class="speed">
<div class="speed-bar">1x</div>
</div>
</div>
<script src="./index.js"></script>
</body>
</html>
*{
margin: 0;
padding: 0;
}
body{
min-height: 100vh;/* vh相對(duì)單位,相對(duì)于瀏覽器的尺寸改變*/
background: #4c4c4c url('https://unsplash.it/1500/900?image=1021');
background-size: cover;/*以容器為基準(zhǔn),將容器覆蓋滿(mǎn),哪怕圖片失真、模糊*/
/*margin: auto;/* margin:auto和margin:0 auto 但不知道父容器寬高,不合適*/
display: flex;/*將容器設(shè)置為彈性容器*/
justify-content: center; /*在X方向居中*/
align-items: center; /*在Y方向居中*/ /*課外拓展:將盒子在垂直方向居中的所有方式*/
}
#wrapper{
width: 850px;
display: flex;
}
.speed{
flex: 1;/*等比繼承,本來(lái)應(yīng)該是1:1繼承,但是vedio有固定寬度,所以speed拿剩下寬度*/
margin: 10px;
background-color: #fff;
border-radius: 50px;
display: flex;
overflow: hidden;/*起到:規(guī)定子容器不能超出,能保持父類(lèi)圓角效果*/
align-items: flex-start;/* */
}
.speed-bar{
width: 100%;
height: 16.3%;
background:linear-gradient(-170deg,#2376ae 0%,#c16ecf 100%); /*設(shè)置漸變色樣式*/
display: flex; /*使得容器可以設(shè)置接下來(lái)兩個(gè)樣式*/
justify-content: center;
align-items: center;
color: #fff;
cursor: pointer;
}
HTML處的排版其實(shí)中規(guī)中矩,只是設(shè)置了一個(gè)用于包裝的id選擇器,然后通過(guò)video標(biāo)簽使用H5自帶的視頻播放功能,可以通過(guò)更改src來(lái)更改播放的視頻。
css處的話(huà)大家只要注意彈性盒子的使用,通過(guò)彈性容器設(shè)置了視頻的水平垂直居中
2.JS實(shí)現(xiàn)功能
代碼如下(示例):
//1.拿到要操作的dom結(jié)構(gòu)
//2.取到鼠標(biāo)在該dom上滑動(dòng)的距離
//3.改變?cè)揹om的高度
//4.改變視頻的播放速度
//獲取對(duì)應(yīng)的dom結(jié)構(gòu)
var speed=document.querySelector('.speed')//補(bǔ)充:getElementsByClassName 都是獲取class選擇器
var bar=document.querySelector('.speed-bar')
var video=document.querySelector('.flex')
speed.addEventListener('mousemove',function(e){ //簡(jiǎn)單來(lái)說(shuō)就是指向了當(dāng)前發(fā)生的事件(click、mouseover等等),保存了當(dāng)前事件的信息。如鼠標(biāo)點(diǎn)擊事件,有鼠標(biāo)的坐標(biāo)信息。
//console.log(e);
var y=e.pageY-speed.offsetTop //鼠標(biāo)在右側(cè)容器中的距離 offsetTop是獲取某個(gè)dom結(jié)構(gòu)到瀏覽器頂部的距離
var percent = y / speed.offsetHeight //offsetHeight是獲取某個(gè)dom結(jié)構(gòu)自身的高度
var min = 0.4 //設(shè)置倍速極限
var max = 4
var playbackRate = percent * (max-min)+min //倍速計(jì)算
var height = Math.round(percent * 100)+'%'//Math.abs() 也是取絕對(duì)值
bar.textContent = playbackRate.toFixed(2)+'×' //改變dom里面的文本內(nèi)容 toFixed(x) 保留x位小數(shù)
video.playbackRate = playbackRate //調(diào)整video的播放倍速
bar.style.height = height //調(diào)整倍數(shù)文本的顯示高度
})
//注:函數(shù)的倆參數(shù)作用分別為:監(jiān)聽(tīng)鼠標(biāo)點(diǎn)擊事件 函數(shù)里面定義函數(shù),成為回調(diào)函數(shù)
重點(diǎn)在于s處實(shí)現(xiàn)控制功能,在編寫(xiě)Js版塊時(shí),我們應(yīng)該明確自己要Js幫我們干什么
1.拿到要操作的dom結(jié)構(gòu)
2.取到鼠標(biāo)在該dom上滑動(dòng)的距離
3.改變?cè)揹om的高度
4.改變視頻的播放速度
有了目標(biāo),我們就一個(gè)一個(gè)去實(shí)現(xiàn)它
具體實(shí)現(xiàn)可以直接看原碼,這里重點(diǎn)提一下回調(diào)函數(shù)和鼠標(biāo)控制倍速原理??梢钥吹?br />
speed.addEventListener( " mousemove " ,function(e){)
這是個(gè)回調(diào)函數(shù),當(dāng)mousemove發(fā)生的時(shí)候就會(huì)執(zhí)行函數(shù)function (e) tmousemove則是起到監(jiān)聽(tīng)鼠標(biāo)位置的作用
到此這篇關(guān)于通過(guò)JS來(lái)實(shí)現(xiàn)簡(jiǎn)單控制視頻播放倍速的文章就介紹到這了,更多相關(guān)js視頻播放倍速內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript跨瀏覽器獲取頁(yè)面中相同class節(jié)點(diǎn)的方法
這篇文章主要介紹了JavaScript跨瀏覽器獲取頁(yè)面中相同class節(jié)點(diǎn)的方法,本文講解使用getELementsByClassName函數(shù)解決這個(gè)需求,并給了一個(gè)開(kāi)源的getELementsByClassName函數(shù)實(shí)現(xiàn),功能更加強(qiáng)大,需要的朋友可以參考下2015-03-03
教學(xué)演示-UBB,剪貼板,textRange及其他
[紅色]教學(xué)演示-UBB,剪貼板,textRange及其他...2006-11-11
javascript網(wǎng)頁(yè)隨機(jī)點(diǎn)名實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了javascript實(shí)現(xiàn)網(wǎng)頁(yè)隨機(jī)變色及實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
終于解決了IE8不支持?jǐn)?shù)組的indexOf方法
今天,測(cè)試報(bào)過(guò)來(lái)一個(gè)js bug, 在IE8下有個(gè)js錯(cuò)誤,但是在其它瀏覽器下(Firefox, Chrome, IE9)下面都很正常。后來(lái)調(diào)試發(fā)現(xiàn)原因是在IE8下,js數(shù)組沒(méi)有indexOf方法。2013-04-04
手把手教你 CKEDITOR 4 實(shí)現(xiàn)Dialog 內(nèi)嵌 IFrame操作詳解
這篇文章主要介紹了手把手教你 CKEDITOR 4 實(shí)現(xiàn)Dialog 內(nèi)嵌 IFrame操作,結(jié)合實(shí)例形式分析了CKEDitor4 Dialog內(nèi)嵌IFrame具體操作步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2019-06-06

