写点什么

JS 逐步教你做 (自己版本) 的视频播放器 (html 逻辑 css 逻辑 js 逻辑)

发布于: 2021 年 03 月 22 日
JS逐步教你做(自己版本)的视频播放器(html逻辑 css逻辑  js逻辑)

html:


<h1>分享给大家的自定义播放器</h1>	<video src="videos/gone.mp4" id="video" class="screen" poster="img/poster.png">	</video>	<div class="controls">		<button class="btn" id="play">			<i class="fa fa-play fa-2x"></i>		</button>		<button class="btn" id="stop">			<i class="fa fa-stop fa-2x"></i>		</button>		<input type="range" id="progress" class="progress" min="0" max="100" value="0">	<span class="timestamp" id="timestamp">00:00</span>	</div>
复制代码

html 逻辑(注意点):

video 里面的 src 代表点击才会看见的。poster 代表一打开页面就能看见的东西.

写一个暂停图标的按钮和播放图标的按钮.

然后是在写一个进度条

然后在写一个 span 用来表示结束的时间是多少.

fa-2x 变大,fa-play 播放按钮,fa 图标第一必须加的.

fa-stop 暂停按钮 放大


效果图:


css 部分:


*{padding: 0px;margin: 0px;}    	body    	{    		background-color: #666;    		display: flex;    		flex-direction: column;    		align-items: center;    		justify-content: center;    		max-height: 100vh;/*记住这里是max啊*/    	}	h1 {	  color: #fff;	}	.screen	{		cursor: pointer;		widows: 60%;		background: #666;		border-top-left-radius: 10px;		border-top-right-radius: 10px;	}	.controls	{		background-color: #333;		  color: #fff;		  width: 60%;		  border-bottom-left-radius: 10px;		  border-bottom-right-radius: 10px;		  display: flex;		  justify-content: center;		  align-items: center;		  padding: 10px;	}	.controls .btn {	  border: 0;	  margin-left: 5px;	  background-color: transparent;	  cursor: pointer;	}	.controls .fa-play {	  color: #28a745;	}
.controls .fa-stop { color: #dc3545; } .controls .fa-pause { color: #fff; } .btn:focus { outline: 0; } @media (max-width: 800px) { .screen,.controls { width: 90%; } }
复制代码

css 逻辑:

第一步:先清空系统默认的样式.

第二步:在 body 里面使用 flex 布局,使用垂直为主轴模式(y),默认主轴是 x 的哈,主轴与侧轴居中,因为 body 里面没有高度。所有设高度为 100vh;

第三步:把图片设为:hover 的时候小手手.高度为整个 body 的 60%,在左上角添加圆角边框。都是 10px.

第三步:设置这里的。

flex 布局,主轴 x 与侧轴 y 都居中


.justify-content: center;		  align-items: center;
复制代码


第四步:


.controls .btn {	  border: 0;	  margin-left: 5px;	  background-color: transparent;	  cursor: pointer;	}
复制代码

这样只能看见图标.然后小手手.


//第五步:

图标的颜色.


.controls .fa-play {	  color: #28a745;	}
.controls .fa-stop { color: #dc3545; } .controls .fa-pause { color: #fff; }
复制代码

第六步:第一个是播放的图标,记住哈,fa-play 图标是同时具备暂停图标的哈.

第七步:第二个暂停图标,

第八步:第三个是

最左边的图标.

<i class="fa fa-play fa-2x"></i>
复制代码

同时具备了 pause 也就是最左边的图标哈.


第九步:

.


btn:focus		{			outline: 0;		}
复制代码


@media (max-width: 800px)		{			.screen,.controls			{				width: 90%;			}		}	
复制代码

媒体查询,当小于 800px 的时候都是 90%

取消 button 的默认事件


效果图:


js 部分:


// 获取节点		const video = document.getElementById("video");		const play = document.getElementById("play");		const stop = document.getElementById("stop");		const progress = document.getElementById("progress");		const timestamp = document.getElementById("timestamp");		video.addEventListener("click",toggleVideoStatus);		video.addEventListener("pause", updatePlayIcon);		video.addEventListener("play", updatePlayIcon);		video.addEventListener("timeupdate", updateProgress);		play.addEventListener("click", toggleVideoStatus);//是用来播放的.按按钮也能播放.		stop.addEventListener("click", stopVideo);//这个是初始化为0的,并且停止掉。		progress.addEventListener("change", setVideoProgress);//这个重要是进度条改变的时候的(拖动的时候).		//以下思路:看见了屏幕在暂停,点击了就播放,看见屏幕在播放,点击了就暂停。		function toggleVideoStatus()// 点击播放或者暂停		{			if(video.paused)//屏幕			{				video.play();			}			else//屏幕			{				video.pause();			}		}		function updatePlayIcon()// 点击video图标更新		{			if(video.paused)			{				play.innerHTML=`<i class="fa fa-play fa-2x"></i>`;//图标的变化			}			else			{				play.innerHTML=`<i class="fa fa-pause fa-2x"></i>`;//图标的变化			}		}		function updateProgress()		{			progress.value=(video.currentTime/video.duration)*100;			/*举个例子把.好吧.假如00:01/00:50=1/50=0.02;0.02*100=2%.假如这个进度条有200px;200*2/100=4px就行了啊.4px就是总时间为50秒的1秒;慢慢来哈,我说的是对的.*/
//获取分钟 let mins=Math.floor(video.currentTime/60);//floor是因为获取的是整数部分. //注意以下,如果是分钟小于10就往前面加个0; if(mins<10) { mins="0"+String(mins);//转换为字符串 } // 获取秒数 let secs=Math.floor(video.currentTime%60);//必须是开始的秒钟哈,结束没什么鸟用. if(secs<10) { secs="0"+String(secs);//转换成字符串来与字符串0拼接. } timestamp.innerHTML=`${mins}:${secs}`; } function stopVideo() { video.currentTime=0; video.pause(); } function setVideoProgress() { video.currentTime=(+progress.value*video.duration)/100;/*+变成是因为变化只能整数啊,字符串不能啊.*/ }/*当前时间是比如50秒,1秒4px把。然后是4*50=200;200/100=2;2代表2%;2%代表走了总长度的2%;代表4px;代表走了一秒了.对的哦慢慢看*/
复制代码


js 逻辑:

第一步:获取到 video 播放 暂停并且回归 00:00 进度条 timestamp 时间走动.

第二步:点击video.addEventListener("click",toggleVideoStatus);

的时候,这个函数:


function toggleVideoStatus()//video的播放与暂停。		{			if(video.paused)			{				video.play();			}			else			{				video.pause();			}		}
复制代码

意思是当前暂停点击就播放,当前播放点击就暂停.


第三步:


video.addEventListener("pause", updatePlayIcon);video.addEventListener("play", updatePlayIcon);
复制代码

这两个事件就代表监听 video 的,当 video 暂停和播放的时候,都执行这个函数,代表


function updatePlayIcon()//左下角的右边的切换。		{			if(video.paused)			{				play.innerHTML=`<i class="fa fa-play fa-2x"></i>`;			}			else			{				play.innerHTML=`<i class="fa fa-pause fa-2x"></i>`;			}		}
复制代码

当 video 暂停时,显示播放的按钮(代表请问你要播放按这.),

当 video 暂停时,显示暂停按钮,表示请问一下,要暂停按这。

第四步:


video.addEventListener("timeupdate", updateProgress);
复制代码

当更新时间时


function updateProgress()//进度条一秒一秒的进度更新,显示的时间也一秒一秒的走。		{			progress.value=(video.currentTime/video.duration)*100;			let mins=Math.floor(video.currentTime/60);						if(mins<10)			{				mins="0"+String(mins);			}			  			  let secs=Math.floor(video.currentTime%60);			  if(secs<10)			  {			  	secs="0"+String(secs);			  timestamp.innerHTML=`${mins}:${secs}`;		}		timestamp.innerHTML=`${mins}:${secs}`;		}
复制代码

progress.value=(video.currentTime/video.duration)*100;:代表:


let mins=Math.floor(video.currentTime/60);						if(mins<10)			{				mins="0"+String(mins);			}			  			  let secs=Math.floor(video.currentTime%60);			  if(secs<10)			  {			  	secs="0"+String(secs);			  timestamp.innerHTML=`${mins}:${secs}`;		}		timestamp.innerHTML=`${mins}:${secs}`;
复制代码

代表

整个函数function updateProgress()代表


第五步:


stop.addEventListener("click", stopVideo);
复制代码



function  stopVideo()//点击后为00:00,并且video为上面一点那个图片.		{			video.currentTime=0;			video.pause();		}
复制代码

代表

红色的部分.


第六步:


progress.addEventListener("change", setVideoProgress);
复制代码


function setVideoProgress()		{			video.currentTime=(+progress.value*video.duration)/100;		}
复制代码

当随意拖动进度条时,对应的

也能充分的对应上.


发布于: 2021 年 03 月 22 日阅读数: 9
用户头像

不成就忍耐到成。我没有什么本事,只会忍耐 2020.10.03 加入

还未添加个人简介

评论

发布
暂无评论
JS逐步教你做(自己版本)的视频播放器(html逻辑 css逻辑  js逻辑)