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

简介: 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>
AI 代码解读

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%;
            }
        }    
AI 代码解读

css逻辑:
第一步:先清空系统默认的样式.
第二步:在body里面使用flex布局,使用垂直为主轴模式(y),默认主轴是x的哈,主轴与侧轴居中,因为body里面没有高度。所有设高度为100vh;
第三步:把图片设为:hover的时候小手手.高度为整个body的60%,在左上角添加圆角边框。都是10px.
第三步:设置这里的。
在这里插入图片描述
flex布局,主轴x与侧轴y都居中

.justify-content: center;
          align-items: center;
AI 代码解读

第四步:

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

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

//第五步:
图标的颜色.

.controls .fa-play {
      color: #28a745;
    }

    .controls .fa-stop {
      color: #dc3545;
    }
    .controls .fa-pause {
          color: #fff;
        }
AI 代码解读

第六步:第一个是播放的图标,记住哈,fa-play图标是同时具备暂停图标的哈.
第七步:第二个暂停图标,
第八步:第三个是
在这里插入图片描述最左边的图标.

<i class="fa fa-play fa-2x"></i>
AI 代码解读

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

第九步:
.

btn:focus
        {
            outline: 0;
        }
AI 代码解读
@media (max-width: 800px)
        {
            .screen,.controls
            {
                width: 90%;
            }
        }    
AI 代码解读

媒体查询,当小于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;代表走了一秒了.对的哦慢慢看*/
AI 代码解读

js逻辑:
第一步:获取到video 播放 暂停并且回归00:00 进度条 timestamp时间走动.
第二步:点击video.addEventListener("click",toggleVideoStatus);
在这里插入图片描述
的时候,这个函数:

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

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

第三步:

video.addEventListener("pause", updatePlayIcon);
video.addEventListener("play", updatePlayIcon);
AI 代码解读

这两个事件就代表监听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>`;
            }
        }
AI 代码解读

当video暂停时,显示播放的按钮(代表请问你要播放按这.),
在这里插入图片描述
当video暂停时,显示暂停按钮,表示请问一下,要暂停按这。
在这里插入图片描述第四步:

video.addEventListener("timeupdate", updateProgress);
AI 代码解读

当更新时间时

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}`;
        }
AI 代码解读

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}`;
AI 代码解读

代表在这里插入图片描述
整个函数function updateProgress()代表
在这里插入图片描述

第五步:

stop.addEventListener("click", stopVideo);
AI 代码解读

在这里插入图片描述

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

代表在这里插入图片描述
红色的部分.

第六步:

progress.addEventListener("change", setVideoProgress);
AI 代码解读
function setVideoProgress()
        {
            video.currentTime=(+progress.value*video.duration)/100;
        }
AI 代码解读

当随意拖动进度条时,对应的在这里插入图片描述也能充分的对应上.

相关文章
|
1月前
|
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
43 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
146 21
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
62 14
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
2月前
css3 svg制作404页面动画效果HTML源码
css3 svg制作404页面动画效果HTML源码
70 34
|
2月前
html+js+css实现的建筑方块立体数字时钟源码
html+js+css实现的建筑方块立体数字时钟源码
101 33
|
3月前
一个好看的小时钟html+js+css源码
一个好看的小时钟html+js+css源码
123 24
页面滚动触发css3动画js插件
delighters.js是一款页面滚动触发css3动画js插件。该js插件可以在页面向下滚动时,为进入浏览器视口的元素制作各种炫酷的CSS3动画效果。
62 13
|
3月前
纸屑飘落生日蛋糕场景js+css3动画特效
纸屑飘落生日蛋糕CSS3动画特效是一款js+css3制作的全屏纸屑飘落,生日蛋糕点亮庆祝动画特效。
63 3
分享10款最棒的免费HTML5视频播放器
最近Web圈子里最让人激动地莫过于HTML5了,特别是HTML5视频,使用HTML5视频标签可以帮助我们解决困扰我们很长时间的网站视频插入问题。 HTML5可以在没有flash的情况下播放视频。现在有很多的漂亮HTML5视频播放界面,包括控制元素,所以你不需要其它的东西来播放视频。
1582 0