Skip to content

HTML <video> 禁止 跳跃/拖动 ”播放条“ 快进的 JS 解决方案

Notifications You must be signed in to change notification settings

JERRY-Z-J-R/html-video-fast-forward-forbidden

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

HTML <video> 禁止 跳跃/拖动 ”播放条“的 JS 解决方案

很多业务场景下,我们需要让 <video> 中的视频不能进行快进(包括:跳跃、拖动),尤其是对于在线教育类视频课业务中,在学生没有看完全部时长的视频之前,需要设置为不允许跳跃或拖动播放条(视频条)快进,这里提供一个在原生的 <video> 标签下,利用 JavaScript 禁止 跳跃/拖动 ”播放条“的解决方案。

提醒:该方案的优点在于:原生、简单、稳定。缺点在于:快进区间必须 >=1 秒才会生效!

demo

<!DOCTYPE html>
<html lang="zh-CN">

<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">
    <title>HTML Video 禁止跳跃/拖动“播放条”快进</title>
</head>

<body>
    <div style="margin: 24px auto; width: 54%;">
        <video id="video" controls width="100%">
            <source src="video.mp4" type="video/mp4">
        </video>
    </div>

    <script>
        var video = document.getElementById("video");
        // 当前视频已播放到达过的最大时长
        var maxTime = 0;
        // timeupdate:已播放时长改变时触发
        video.addEventListener('timeupdate', function () {
            if (this.currentTime - maxTime > 0 && this.currentTime - maxTime < 1) {
                // 更新最大时长
                maxTime = this.currentTime;
            }
            // 移动/跳跃快进时,跳转回最大时长处
            if (this.currentTime > maxTime) {
                this.currentTime = maxTime;
            }
        }, false);
    </script>
</body>

</html>

下面提供一个案例,模拟了【已完成/未完成】两种情况下视频【可以快进/不能快进】的业务情况:

demo2

<!DOCTYPE html>
<html lang="zh-CN">

<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">
    <title>HTML Video 禁止跳跃/拖动“播放条”快进</title>
</head>

<body>
    <div style="margin: 24px auto; width: 54%; text-align: center;">
        <video id="video" controls width="100%">
            <source src="video.mp4" type="video/mp4">
        </video>
        <button id="btnOk" onclick="btnOk()" style="width: 24%; font-size: 24px;">已完成</button>
        <button id="btnNo" onclick="btnNo()" style="width: 24%; font-size: 24px">未完成</button>
    </div>

    <script>
        var video = document.getElementById("video");
        // 当前视频已播放到达过的最大时长
        var maxTime = 0;

        // 业务函数
        var videoUpdate = function () {
            if (this.currentTime - maxTime > 0 && this.currentTime - maxTime < 1) {
                // 更新最大时长
                maxTime = this.currentTime;
            }
            // 移动/跳跃快进时,跳转回最大时长处
            if (this.currentTime > maxTime) {
                this.currentTime = maxTime;
            }
        }

        function btnOk() {
            document.getElementById("btnOk").style.color = "#ff0000";
            document.getElementById("btnNo").style.color = "#000000";
            // 当前视频已经完成(取消事件监听,可以随意快进)
            video.removeEventListener('timeupdate', videoUpdate, false);
        }

        function btnNo() {
            document.getElementById("btnNo").style.color = "#ff0000";
            document.getElementById("btnOk").style.color = "#000000";
            // 当前视频未完成
            // timeupdate:已播放时长改变时触发
            video.addEventListener('timeupdate', videoUpdate, false);
        }

        // 初始时设置未完成
        btnNo();
    </script>
</body>

About

HTML <video> 禁止 跳跃/拖动 ”播放条“ 快进的 JS 解决方案

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published