当前位置: 首页 > article >正文

react+video:限制快进、倍速、画中画

实现代码:

<video ref={videoRef} src={videoUrl} className={style.video} controls onRateChange={rateChange} onPlay={playVideo} onPause={pauseVideo} onTimeUpdate={timeUpdate} disablePictureInPicture playsInline poster={poster} controlsList="nodownload noremoteplayback noplaybackrate">
     您的浏览器不支持 video 标签。
</video>

js

    const [videoUrl, setVideoUrl] = useState('http://10.*.*.*:4010/file/attachments/20230411150035.mp4');
    const videoRef = useRef(null);
    const lastTime = useRef(0);
    const [isPlaying, setIsPlaying] = useState(false);
    useEffect(() => {
        const videoElement = videoRef.current;
        //限制画中画播放
        const handleEnterPictureInPicture = async () => {
            Toast.show('当前视频不支持画中画播放');
            if (document.pictureInPictureElement) {
                try {
                    await document.exitPictureInPicture();
                } catch (error) {
                    console.error('Error exiting Picture-in-Picture', error);
                }
            }
        };
        // 监听事件
        videoElement.addEventListener('enterpictureinpicture', handleEnterPictureInPicture);
        return () => {
            videoElement.removeEventListener('enterpictureinpicture', handleEnterPictureInPicture);
        };
    }, []);
    //限制倍速
    const rateChange = () => {
        if (videoRef.current.playbackRate !== 1.0) {
            Toast.show('当前视频不支持倍速播放');
            videoRef.current.playbackRate = 1.0;
        }
    };
    
    const playVideo = () => {
        if (!isPlaying) {
            videoRef.current.play();
            setIsPlaying(true);
        }
    };
    const pauseVideo = () => {
        if (isPlaying) {
            videoRef.current.pause();
            setIsPlaying(false);
        }
    };
    //点击实现播放/暂停
    const handlePlayPause = () => {
        if (isPlaying) {
            pauseVideo();
        } else {
            playVideo();
        }
    };
    //限制快进
    const timeUpdate = () => {
        const currentTime = videoRef.current.currentTime;
        console.log(currentTime);
        if (currentTime > lastTime.current + 1) {
            Toast.show('当前视频不支持快进');
            videoRef.current.currentTime = lastTime.current;
            return;
        } else {
            lastTime.current = currentTime;
        }
    };


http://www.kler.cn/a/354615.html

相关文章:

  • 推动多语言语音科技迈向新高度:INTERSPEECH 2025 ML-SUPERB 2.0 挑战赛
  • 【生物信息】h5py.File
  • STM32供电参考设计
  • 从零手写线性回归模型:PyTorch 实现深度学习入门教程
  • 代码随想录 链表 test 5
  • 【docker系列】可视化Docker 管理工具——Portainer
  • el-table中实现可选表格区域的鼠标事件检测
  • 程序员35+出路何在?
  • 三格电子-Profibus-DP转光纤点对点式【MS-F155-P】
  • springboot+react实现移动端相册(上传图片到oss/ 批量删除/ 查看图片详情等功能)
  • Facebook上的隐私保护:如何加强个人数据的安全性?
  • redis高级数据类型之Geospatial
  • RDK X5/X3 yolov5目标检测从环境搭建到设备集成
  • 深度学习的程序实例
  • MT1331-MT1340 码题集 (c 语言详解)
  • MATLAB垃圾定位和检测识别系统
  • JavaWeb合集-SpringBoot项目配套知识
  • QEMU入门1:ubuntu22.04搭建QEMU运行环境
  • 【python实战】利用代理ip爬取Alibaba海外版数据
  • zabbix 6.4主机名不支持中文的问题优化
  • HTTP vs WebSocket
  • 自动化检查网页的TDK,python+selenium自动化测试web的网页源代码中的title,Description,Keywords
  • uni-app uni.setTabBarBadge 不生效
  • 08 django管理系统 - 部门管理 - 部门分页
  • jsp怎么实现点赞功能
  • 编译器与集成开发环境