视频倍数播放器:让你实现倍数自由

320 阅读4分钟

视频播放速度控制器:交互式用户体验设计

本文将深入分析一个视频播放速度控制器实现,通过直观的滑块交互让用户实时调整视频播放速度。这个设计不仅功能实用,还提供了优雅的视觉反馈

核心功能解析

js:

// 1. 获取元素
var speed = document.querySelector('.speed');        // 速度控制条容器(白色背景)
var bar = document.querySelector('.speed-bar');     // 彩色速度条
var video = document.querySelector('.flex');        // 视频元素

// 2. 监听白色容器上的鼠标移动事件
speed.addEventListener('mousemove', function(e) {
  
  // 3. 计算鼠标在白色容器内的垂直位置(相对容器顶部)
  var y = e.pageY - speed.offsetTop;
  
  // 4. 计算鼠标位置占容器高度的百分比 (0-1)
  var percent = y / speed.offsetHeight;
  
  // 5. 将百分比转换为高度值(带%单位)
  var height = Math.round(percent * 100) + '%';
  
  // 6. 设置彩色速度条的高度
  bar.style.height = height;

  // 7. 设置播放速度范围(最小和最大值)
  var min = 0.4;  // 最低播放速度
  var max = 4;    // 最高播放速度
  
  // 8. 根据百分比计算实际播放速度
  // 公式:速度 = 百分比 × (最大速度 - 最小速度) + 最小速度
  var playbackRate = percent * (max - min) + min;
  
  // 9. 在彩色条上显示当前速度(保留2位小数)
  bar.textContent = playbackRate.toFixed(2) + 'x';
  
  // 10. 将计算出的速度应用到视频上
  video.playbackRate = playbackRate;
})
  1. 百分比转换

    • y / speed.offsetHeight 将绝对位置转换为容器高度百分比 (0-1)
    • 例如:容器高200px,鼠标在100px处 → 50% → 0.5
  2. 速度映射

    • 将线性百分比 (0-1) 映射到速度范围 (0.4-4)
    • 当鼠标在顶部:percent=0 → 速度=0.4x
    • 当鼠标在底部:percent=1 → 速度=4x
    • 中间位置线性过渡
  3. 位置计算

    • e.pageY 获取鼠标在页面中的垂直坐标
    • speed.offsetTop 获取容器相对于文档顶部的距离
    • 两者相减得到鼠标在容器内部的垂直位置
  4. 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
        class="flex"
        src="https://media.w3.org/2010/05/sintel/trailer.mp4"
        controls
      ></video>

      <!-- 滑块 -->
      <div class="speed">
        <div class="speed-bar">1x</div>
      </div>
    </div>

    <script src="./index.js"></script>
  </body>
</html>

主体(body):

  • 页面包含一个<div>,类名为wrapper,它包裹了两个主要元素:一个视频播放器和一个速度控制条。

  • 视频播放器:

    • 用户可以通过视频自带的控制条播放/暂停视频
    • 支持进度条拖拽、音量控制等标准功能
    • <video>元素,类名为flex,设置了一个视频源(src)为你的视频地址,并包含controls属性,这样浏览器会提供默认的视频控制界面(播放/暂停按钮、进度条等)。
  • 速度控制条:

    • 一个类名为speed<div>,内部有一个类名为speed-bar<div>,初始显示文本为"1x"(表示1倍速播放)。
      • 用户应能通过拖动 .speed-bar 调整播放速度
    • 滑块位置越高 → 播放速度越快
    • 滑块位置越低 → 播放速度越慢
    • 速度值实时显示在 .speed-bar 上(如 0.5x, 1.5x 等)
  1. css
*{
  margin: 0;
  padding: 0;
}
body{
  height: 100vh;
  background: #4c4c4c url('https://unsplash.it/1500/900?image=1021');
  background-size: cover;
  display: flex;
  justify-content: center;
  align-items: center;
}

.wrapper{
  display: flex;
  width: 850px;
}

.flex{
  width: 765px;
  height: 430px;
}

.speed{

flex: 1; /* 占据剩余空间 */

display: inline-block; /* 行内块显示(但这里在flex容器内,flex:1会覆盖) */

background: #fff; /* 白色背景 */

margin: 10px; /* 外边距10px */

border-radius: 50px; /* 圆角50px,形成椭圆效果 */

overflow: hidden; /* 隐藏超出部分,确保内部的.speed-bar不会超出圆角边界 */

}

.speed-bar{

width: 100%; /* 宽度与父容器相同 */

height: 16.3%; /* 初始高度,约为父容器高度的16.3% */

background: linear-gradient(to bottom, #d75d29 0%, #b0068e 100%); /* 从上到下的渐变色 */

display: flex; /* 弹性布局 */

justify-content: center; /* 水平居中 */

align-items: center; /* 垂直居中 */

color: #fff; /* 文字颜色为白色 */

}

    

布局效果说明:

  1. 整体布局

    • 页面居中显示850px宽的容器
    • 容器内水平排列:左侧视频(765px) + 右侧速度条(剩余宽度)
  2. 速度控制条设计

    • 白色胶囊形状容器(圆角50px)
    • 内部彩色渐变条初始显示16.3%高度
    • 速度值文字居中显示在彩色条上
  3. 响应式特点

    • 速度条高度会随JavaScript交互变化(通过bar.style.height)
    • 背景渐变保持固定方向(从上到下)

效果图:

屏幕截图 2025-06-16 235908.png

快来试试看,做一个你的倍数视频播放器吧

欢迎友友们点赞评论!