一键掌控视频播放速度,滑动调节轻松实现!!

前言

传统的视频播放器往往只提供几种固定的倍速选项

今天我们来实现一个通过滑动调节视频的播放倍速,这种方式极其优雅

优雅的背后更是对自身逻辑思维能力的一种考验,接下来就让我们一起探索一下吧

实现

实现效果

image.png

实现流程

页面代码分析

<div class="wrapper">
        <video src="./mv.mp4" controls width="765" height="430" class="video"></video>

        <div class="speed">
            <div class="speed-bar">1x</div>
        </div>
    </div>
  1. <div class="wrapper">: 这是一个包裹整个视频播放区域的容器,用于布局和样式设置。

  2. <video src="./mv.mp4" controls width="765" height="430" class="video"></video>: 这是一个标准的 HTML <video> 标签,用于插入一个视频文件。

    • src="./mv.mp4": 指定视频文件的路径和文件名。
    • controls: 为视频添加默认的播放控件,如播放/暂停、进度条、音量控制等。
    • width="765" height="430": 设置视频播放器的宽度和高度。
    • class="video": 为视频元素添加一个类名,用于后续的通过类名获取该元素。
  3. <div class="speed">: 这是一个包含视频播放速度控制器的容器。

  4. <div class="speed-bar">1x</div>: 这是实际的速度控制条,初始显示为"1x"倍速

css代码比较简单就不做分析了,直接附上

* {
    margin: 0;
    padding: 0;
}

body {
    /* background: url(./背景图.jpg); */
    background-color: #e0effe;
}

.wrapper {
    position: fixed;
    left: 50%;
    transform: translate(-50%, -50%);
    top: 50%;
    display: flex;
}

.speed {
    width: 50px;
    height: 430px;
    background-color: #fff;
    /*display: inline-block;*/
    border-radius: 50px;
    overflow: hidden;
}

.speed-bar {
    width: 100%;
    height: 16%;
    background: linear-gradient(to bottom, #2376ae, #c16ecf);
    display: flex;
    justify-content: center;
    align-items: center;
    cursor: pointer;
}
}

js代码分析(重点)

重点分析js部分的逻辑思维

  • 怎么去实现,实现的思路?

首先,既然是根据滑块去获取倍速,那么鼠标的位置肯定是和视频播放的倍数是有关系的,通过逻辑关系与倍速实现滑动改变倍速

第一步,先获取三个元素,方便对其进行操作

var speed = document.querySelector('.speed')
var video = document.querySelector('.video')
var speedBar = document.querySelector('.speed-bar')

既然是滑块,就必须获取鼠标的位置,可以通过addEventListener去监听mousemove事件,当监听到事件后,便会触发回调函数

speed.addEventListener('mousemove', function (e) {
    var y = e.pageY - speed.getBoundingClientRect().top
    var percent = y / speed.offsetHeight
    var height = Math.round(percent * 100) + '%'

    // 用js修改speed-bar容器的height
    speedBar.style.height = height
    // 修改倍速文字
    var min = 0.5
    var max = 4
    var playSpeed = percent * (max - min) + min
    speedBar.textContent = playSpeed.toFixed(2) + 'x'

    // 更改视频播放速度
    video.playbackRate = playSpeed

})

重点分析回调函数

在回调函数当中,会传入对象e 事件对象,事件对象包含了与事件相关的各种信息

  1. var y = e.pageY - speed.getBoundingClientRect().top: 计算鼠标指针相对于 “speed” 元素顶部的垂直距离。
  2. var percent = y / speed.offsetHeight: 计算鼠标指针在 “speed” 元素高度上的百分比位置。
  3. var height = Math.round(percent * 100) + '%': 根据百分比位置计算出一个新的高度值,并转换成字符串百分比格式。
  4. speedBar.style.height = height: 将计算出的新高度值设置到 class 名为 “speed-bar” 的元素的 CSS 高度属性上,从而实现了速度条的滑动效果。
  5. var min = 0.5, var max = 4: 定义了视频播放速度的最小值和最大值。
  6. var playSpeed = percent * (max - min) + min: 根据鼠标位置的百分比,计算出一个介于最小值和最大值之间的播放速度值。
  7. speedBar.textContent = playSpeed.toFixed(2) + 'x': 将计算出的播放速度值更新到 “speed-bar” 元素的文本内容上,显示当前的倍速。
  8. video.playbackRate = playSpeed: 将计算出的播放速度值设置到 “video” 元素的 playbackRate 属性上,从而实现了视频播放速度的动态调整。

总结

本文展示了如何使用 HTML、CSS 和 JavaScript 结合起来,创建一个具有视频播放速度调节功能的视频播放器界面。这种交互设计有助于提高用户体验,让观看视频更加便捷灵活。

完整代码

欢迎大家给出建议和优化

播放的视频可随意,只需更改video的src地址即可

  • html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./style.css">
</head>

<body>
    <div class="wrapper">
        <video src="./mv.mp4" controls width="765" height="430" class="video"></video>
        <div class="speed">
            <div class="speed-bar">1x</div>
        </div>
    </div>
    <script src="./index.js"></script>
</body>
</html>
  • css
* {
    margin: 0;
    padding: 0;
}

body {
    /* background: url(./背景图.jpg); */
    background-color: #e0effe;
}

.wrapper {
    position: fixed;
    left: 50%;
    transform: translate(-50%, -50%);
    top: 50%;
    display: flex;
}

.speed {
    width: 50px;
    height: 430px;
    background-color: #fff;
    /*display: inline-block;*/
    border-radius: 50px;
    overflow: hidden;
}

.speed-bar {
    width: 100%;
    height: 16%;
    background: linear-gradient(to bottom, #2376ae, #c16ecf);
    display: flex;
    justify-content: center;
    align-items: center;
    cursor: pointer;
}

.input1 {
    width: 400px;
    height: 60px;
    border: 10;
    background-color: transparent;
    position: fixed;
    top: 8%;
    left: 40%;
}

.input2 {
    height: 45px;
    font-size: 20;
    border: 10;
    background-color: transparent;
    position: fixed;
    top: 8%;
    left: 66.5%;
}
  • js
// 获取白底容器
// 在白色容器上监听鼠标的移动事件
// 获取到鼠标移动的距离
// 根据鼠标移动的距离来设计彩色容器的高度
var speed = document.querySelector('.speed')
var video = document.querySelector('.video')
var speedBar = document.querySelector('.speed-bar')

speed.addEventListener('mousemove', function (e) {
    var y = e.pageY - speed.getBoundingClientRect().top
    var percent = y / speed.offsetHeight
    var height = Math.round(percent * 100) + '%'

    // 用js修改speed-bar容器的height
    speedBar.style.height = height
    // 修改倍速文字
    var min = 0.5
    var max = 4
    var playSpeed = percent * (max - min) + min
    speedBar.textContent = playSpeed.toFixed(2) + 'x'

    // 更改视频播放速度
    video.playbackRate = playSpeed

})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值