js实现视频的播放、暂停、静音、加速、减速、快进、后退、拖动进度条改变音量、显示视频进度

话不多说,直接上代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        li {
            background-color: white;
            width: 50px;
            height: 30px;
        }
    </style>
</head>

<body>
    <figure style="text-align: center">
        <figcaption style="margin: 10px">DIY视频播放器</figcaption>
        <video id="video" src="fun.mp4" style="width: 500px;">
        <span>您的浏览器不支持video标签,请换个浏览器试一下吧</span>
    </video>
        <div>
            <progress id="progress" value="0" max="100" style="width: 450px"></progress>
            <span id="curTime">00:00</span>/<span id="totalTime">00:00</span>
        </div>
        <div>
            <button id="btn_play" onclick="playV()">播放</button>
            <button id="btn_pause" onclick="pauseV()">暂停</button>
            <button id="btn_muted" onclick="mutedV()">静音</button>
            <button id="btn_fullScreen" onclick="fullScreen()">全屏</button>
            <input type="range" value='1' nae="range" id="btn_volume" min="0" max="1" step='0.1' onmousedown="volumeV()">
            <span id="volumee">100</span>
            <div style="display: inline;position: relative;">
                <button id="btn_go" onclick="goV()">加速</button>
                <ul id="goUl" style="list-style:none;display: none;position: absolute;left: -40px;top:-140px;">
                    <li>1</li>
                    <li>1.5</li>
                    <li>1.75</li>
                    <li>2</li>
                </ul>
            </div>

            <button id="btn_back" onclick="backV()">减速</button>
            <button id="go_five" onclick="goFiveV()">快进5s</button>
            <button id="back_five" onclick="backFiveV()">后退5s</button>
        </div>
    </figure>
    <script type="text/javascript">
        var ele = document.getElementById("video");
        //播放
        function playV() {
            ele.play();
        }

        //暂停
        function pauseV() {
            ele.pause();
        }

        //静音  点击第一次静音再点击关闭静音
        function mutedV() {
            if (ele.muted === true) {
                ele.muted = false;
            } else {
                ele.muted = true;
            }
        }

        //全屏
        function fullScreen() {
            if (ele.mozRequestFullScreen) {
                ele.mozRequestFullScreen(); //火狐浏览器
            } else if (ele.webkitRequestFullscreen) {
                ele.webkitRequestFullscreen(); //谷歌浏览器
            } else if (ele.oRequestFullscreen) {
                ele.oRequestFullscreen(); //opera浏览器
            } else if (ele.msRequestFullscreen) {
                ele.msRequestFullscreen(); //ie浏览器
            } else if (ele.requestFullscreen) {
                ele.requestFullscreen();
            }
        }

        //加速
        function goV() {
            var goUl = document.getElementById("goUl");
            if (goUl.style.display === "inline") {
                goUl.style.display = "none";
            } else {
                goUl.style.display = "inline";
            }

            goUl.onclick = function() {
                var li = document.getElementsByTagName("li");
                for (var i = 0; i < li.length; i++) {
                    (function(x) {
                        li[x].onclick = function() {
                            ele.play(); //调速时直接播放
                            ele.playbackRate = li[x].innerHTML;
                        }
                    })(i);
                }
            }
        }

        //减速
        function backV() {
            ele.play();
            ele.playbackRate = 0.5;
        }

        //快进5秒
        function goFiveV() {
            ele.play();
            ele.currentTime = ele.currentTime + 5;
        }

        //后退5秒
        function backFiveV() {
            if (ele.currentTime != 0) {
                ele.currentTime = ele.currentTime - 5;
            }
        }

        //改变音量
        function volumeV() {
            var btn = document.getElementById("btn_volume");
            var volumee = document.getElementById("volumee");
            btn.onmousemove = function() {
                video.volume = this.value;
                volumee.innerHTML = this.value * 100;
            }
        }

        //获取视频总时间  在视频加载完成后触发该函数
        ele.onloadedmetadata = function() {
            var totalTime = document.getElementById("totalTime");
            var allTime = ele.duration;
            var m = Math.floor(allTime % 3600 / 60);
            var s = Math.floor(allTime % 60);
            m = m >= 10 ? m : '0' + m;
            s = s >= 10 ? s : '0' + s;
            totalTime.innerHTML = m + ':' + s;
        }

        //视频播放位置发生改变时触发该函数
        ele.ontimeupdate = function() {
            var progress = document.getElementById("progress");
            var curTime = document.getElementById("curTime");
            progress.value = 100 * ele.currentTime / ele.duration; ///this.totaltime;
            var time = ele.currentTime;
            var m = Math.floor(time % 3600 / 60);
            var s = Math.floor(time % 60);
            m = m >= 10 ? m : '0' + m;
            s = s >= 10 ? s : '0' + s;
            curTime.innerHTML = m + ':' + s;
        }
    </script>
</body>

</html>

效果:

如果有什么更好的方法,欢迎交流

  • 5
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的自定义控制栏的HTML5网页视频播放器示例: ```html <!DOCTYPE html> <html> <head> <title>自定义控制栏HTML5视频播放器</title> <style> /* 控制栏样式 */ .controls { display: flex; justify-content: space-between; align-items: center; background-color: rgba(0, 0, 0, 0.5); padding: 10px; position: absolute; bottom: 0; width: 100%; } .controls button { background-color: transparent; border: none; color: #fff; cursor: pointer; font-size: 20px; margin-right: 10px; outline: none; } .controls button:hover { color: #ccc; } /* 视频样式 */ video { width: 100%; height: auto; } </style> </head> <body> <video id="my-video" controls> <source src="video.mp4" type="video/mp4"> </video> <div class="controls"> <button id="play-pause-btn">►</button> <button id="fast-forward-btn">►►</button> <button id="mute-btn"></button> <input id="volume-slider" type="range" min="0" max="1" step="0.1" value="1"> <span id="current-time"></span> <input id="seek-bar" type="range" min="0" value="0"> <span id="duration"></span> </div> <script> var video = document.getElementById("my-video"); var playPauseBtn = document.getElementById("play-pause-btn"); var fastForwardBtn = document.getElementById("fast-forward-btn"); var muteBtn = document.getElementById("mute-btn"); var volumeSlider = document.getElementById("volume-slider"); var currentTime = document.getElementById("current-time"); var seekBar = document.getElementById("seek-bar"); var duration = document.getElementById("duration"); // 播放暂停视频 function togglePlayPause() { if (video.paused) { video.play(); playPauseBtn.innerHTML = "❚❚"; } else { video.pause(); playPauseBtn.innerHTML = "►"; } } // 快进视频 function fastForward() { video.currentTime += 5; } // 静音或取消静音 function toggleMute() { if (video.muted) { video.muted = false; muteBtn.innerHTML = ""; } else { video.muted = true; muteBtn.innerHTML = ""; } } // 调整音量 function adjustVolume() { video.volume = volumeSlider.value; } // 更新当前时间和视频时长 function updateTime() { currentTime.innerHTML = formatTime(video.currentTime); duration.innerHTML = formatTime(video.duration); // 更新进度条位置 var progress = (video.currentTime / video.duration) * 100; seekBar.value = progress; } // 跳转视频进度 function seekVideo() { var progress = seekBar.value / 100; var time = progress * video.duration; video.currentTime = time; } // 格式化时间 function formatTime(time) { var minutes = Math.floor(time / 60); var seconds = Math.floor(time - minutes * 60); if (seconds < 10) { seconds = "0" + seconds; } return minutes + ":" + seconds; } // 监听视频事件 video.addEventListener("play", function() { playPauseBtn.innerHTML = "❚❚"; }); video.addEventListener("pause", function() { playPauseBtn.innerHTML = "►"; }); video.addEventListener("timeupdate", updateTime); // 监听控制栏按钮点击事件 playPauseBtn.addEventListener("click", togglePlayPause); fastForwardBtn.addEventListener("click", fastForward); muteBtn.addEventListener("click", toggleMute); volumeSlider.addEventListener("input", adjustVolume); seekBar.addEventListener("input", seekVideo); </script> </body> </html> ``` 这个示例中,我们使用了 HTML5 的 `<video>` 元素来显示视频,并添加了一个自定义的控制栏。控制栏包含了播放/暂停按钮、快进按钮、静音/取消静音按钮、音量滑块、当前时间和视频时长、进度条等控件。 在 JavaScript 中,我们添加了一些函数来处理控制栏按钮的点击事件,以及更新视频播放状态、音量进度等信息。我们还监听了视频的一些事件,如播放/暂停、时间更新等,以便及时更新控制栏上的信息。 这个示例可以在大多数现代浏览器上正常工作,并在不同浏览器上呈现相同的外观和行为。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值