You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义视频播放器:实现暂停时选项菜单保持显示的方案

实现视频暂停时保持菜单显示的方案

你的核心需求是:播放状态下无操作自动隐藏菜单,暂停状态下始终显示菜单,现有代码的问题是不管播放状态,超时就会隐藏,调整逻辑即可实现,具体修改如下:


1. 修复定时器引用问题(关键)

原代码里的timeOut是局部变量,每次触发事件都会重新声明,导致clearTimeout根本清不掉之前的定时器。改用useRef保存定时器和选项栏DOM,避免引用丢失:

import { useState, useRef } from 'react';

const refs = useRef(null)
const videoOptionsRef = useRef(null) // 存储选项栏DOM
const hideTimeoutRef = useRef(null) // 存储定时器引用
let timeStep = 10
let volumeBar;

// 播放/暂停逻辑,暂停时主动显示菜单
const [isPlay, setPlay] = useState(false)
const handlePlay = () => {
    const video = refs.current?.firstChild?.children[0]
    if(isPlay){
        video?.pause()
        setPlay(false)
        // 暂停时立刻显示菜单
        videoOptionsRef.current.style = `opacity: 1; transition: opacity 0.5s;`
    }else{
        video?.play()
        setPlay(true)
    }
}

2. 调整菜单显示/隐藏逻辑

只有视频正在播放时,才启动无操作隐藏的定时器;暂停状态下直接保持菜单显示,不启动定时器:

const handleVideoHover = (e) => {
    const videoOptions = videoOptionsRef.current
    // 先清掉之前的定时器,避免重复触发
    if (hideTimeoutRef.current) {
        clearTimeout(hideTimeoutRef.current)
    }
    // 先显示菜单
    videoOptions.style = `opacity: 1; transition: opacity 0.5s;`

    // 只有播放状态下,才设置超时隐藏
    if (isPlay) {
        hideTimeoutRef.current = setTimeout(() => {
            videoOptions.style = `opacity: 0; transition: opacity 2.5s;`
        }, 2000)
    }
}

3. 优化鼠标离开事件

鼠标离开容器时,只有播放状态才隐藏菜单,暂停状态保持显示:

<div className='video-container w-100 h-100' 
     onClick={handleVideoHover} 
     onKeyDown={handleVideoHover} 
     onMouseMove={handleVideoHover} 
     onTouchStart={handleVideoHover}
     onMouseLeave={() => {
         const videoOptions = videoOptionsRef.current
         if (isPlay) {
             videoOptions.style = `opacity: 0; transition: opacity 2.5s;`
         }
     }}>
    {/* 你的视频元素 */}
    {/* 给选项栏容器加上ref */}
    <div className='video-options-container' ref={videoOptionsRef}>
        {/* 菜单内容 */}
    </div>
</div>

逻辑说明

  • 播放状态:用户操作(移动鼠标、点击等)时显示菜单,无操作2秒后自动隐藏;鼠标离开容器直接隐藏。
  • 暂停状态:不管有没有操作,菜单始终保持显示;点击暂停按钮时也会立刻显示菜单。

内容的提问来源于stack exchange,提问作者Viper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:00:24