news 2026/4/14 23:49:21

视频进度控制脚本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
视频进度控制脚本
// 视频进度控制脚本 - 直接复制到浏览器控制台运行 // 支持左右箭头键快进/快退视频 (function () { 'use strict'; // 配置 const SEEK_SECONDS = 5; // 每次跳转的秒数 const LONG_SEEK_SECONDS = 10; // 长按Shift时跳转的秒数 console.log('🎬 视频键盘控制已启用'); console.log(`← 左箭头: 后退 ${SEEK_SECONDS} 秒`); console.log(`→ 右箭头: 前进 ${SEEK_SECONDS} 秒`); console.log(`Shift + ← / →: 前进/后退 ${LONG_SEEK_SECONDS} 秒`); console.log(`空格键: 播放/暂停`); console.log(`↑ / ↓: 音量增减`); // 查找页面上的视频元素 function getVideoElement() { // 优先查找正在播放的视频 const videos = document.querySelectorAll('video'); for (let video of videos) { if (!video.paused || video.currentTime > 0) { return video; } } // 如果没有正在播放的,返回第一个视频 return videos[0] || null; } // 显示提示信息 function showToast(message) { const existingToast = document.getElementById('video-seek-toast'); if (existingToast) { existingToast.remove(); } const toast = document.createElement('div'); toast.id = 'video-seek-toast'; toast.textContent = message; toast.style.cssText = ` position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: rgba(0, 0, 0, 0.8); color: white; padding: 15px 30px; border-radius: 8px; font-size: 18px; font-weight: bold; z-index: 999999; pointer-events: none; animation: fadeInOut 1s ease-in-out; `; // 添加动画样式 if (!document.getElementById('video-seek-toast-style')) { const style = document.createElement('style'); style.id = 'video-seek-toast-style'; style.textContent = ` @keyframes fadeInOut { 0% { opacity: 0; transform: translate(-50%, -50%) scale(0.8); } 20% { opacity: 1; transform: translate(-50%, -50%) scale(1); } 80% { opacity: 1; transform: translate(-50%, -50%) scale(1); } 100% { opacity: 0; transform: translate(-50%, -50%) scale(0.8); } } `; document.head.appendChild(style); } document.body.appendChild(toast); setTimeout(() => toast.remove(), 1000); } // 格式化时间 function formatTime(seconds) { const h = Math.floor(seconds / 3600); const m = Math.floor((seconds % 3600) / 60); const s = Math.floor(seconds % 60); if (h > 0) { return `${h}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`; } return `${m}:${s.toString().padStart(2, '0')}`; } // 键盘事件处理 function handleKeyPress(e) { const video = getVideoElement(); if (!video) { console.warn('未找到视频元素'); return; } // 如果焦点在输入框上,不处理 const activeElement = document.activeElement; if (activeElement && ( activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA' || activeElement.isContentEditable )) { return; } let seekAmount = e.shiftKey ? LONG_SEEK_SECONDS : SEEK_SECONDS; let handled = false; switch (e.key) { case 'ArrowLeft': // 左箭头 - 后退 video.currentTime = Math.max(0, video.currentTime - seekAmount); showToast(`⏪ ${formatTime(video.currentTime)}`); handled = true; break; case 'ArrowRight': // 右箭头 - 前进 video.currentTime = Math.min(video.duration, video.currentTime + seekAmount); showToast(`⏩ ${formatTime(video.currentTime)}`); handled = true; break; case ' ': // 空格 - 播放/暂停 if (video.paused) { video.play(); showToast('▶️ 播放'); } else { video.pause(); showToast('⏸️ 暂停'); } handled = true; break; case 'ArrowUp': // 上箭头 - 增加音量 video.volume = Math.min(1, video.volume + 0.1); showToast(`🔊 音量: ${Math.round(video.volume * 100)}%`); handled = true; break; case 'ArrowDown': // 下箭头 - 减少音量 video.volume = Math.max(0, video.volume - 0.1); showToast(`🔉 音量: ${Math.round(video.volume * 100)}%`); handled = true; break; case 'f': case 'F': // F键 - 全屏 if (document.fullscreenElement) { document.exitFullscreen(); } else { video.requestFullscreen().catch(err => { console.error('无法全屏:', err); }); } handled = true; break; case 'm': case 'M': // M键 - 静音 video.muted = !video.muted; showToast(video.muted ? '🔇 静音' : '🔊 取消静音'); handled = true; break; } if (handled) { e.preventDefault(); e.stopPropagation(); } } // 移除旧的监听器(如果存在) if (window.videoSeekControlListener) { document.removeEventListener('keydown', window.videoSeekControlListener); } // 添加新的监听器 window.videoSeekControlListener = handleKeyPress; document.addEventListener('keydown', handleKeyPress, true); console.log('✅ 键盘控制已激活!'); // 显示启动提示 showToast('⌨️ 键盘控制已启动'); })();
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/5 14:14:28

一篇拿下!C++:类和对象(上)、封装、实例化和this指针详解

一、类的定义类的定义格式class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。为了区分…

作者头像 李华
网站建设 2026/4/8 16:24:47

板栗矮砧密植:水肥一体化系统的铺设要点指南

认识板栗矮砧密植板栗矮砧密植,简单来说就是选用矮化砧木嫁接的板栗品种(Dwarf rootstock variety),通过科学增加种植密度来提高产量的创新栽培模式。就像在有限的果园空间里,精心规划每一寸土地,让更多果树…

作者头像 李华
网站建设 2026/4/10 6:53:55

LeetCode 3606.优惠券校验器:分类 + 排序

【LetMeFly】3606.优惠券校验器:分类 排序 力扣题目链接:https://leetcode.cn/problems/coupon-code-validator/ 给你三个长度为 n 的数组,分别描述 n 个优惠券的属性:code、businessLine 和 isActive。其中,第 i 个…

作者头像 李华
网站建设 2026/4/13 18:10:06

ensp vlan实验作业

一、实验拓扑(截自己的拓扑图,附加上地址分配情况)二、实验需求1、全网可达;2、使用DHCP获取IP地址;三、配置思路1、在各个交换机上创建vlan2、分析链路类型,配置相应的接口为access口或是trunk口3、配置路…

作者头像 李华
网站建设 2026/4/8 10:24:58

24、网页开发技术综合解析

网页开发技术综合解析 1. 基础概念与环境搭建 在网页开发领域,有众多基础概念和环境搭建的要点需要掌握。首先是互联网相关的概念,互联网地址、IP 协议以及互联网服务提供商(ISP)是网络连接的基础。而在操作系统方面,Linux 是一个重要的选择。Linux 有多种发行版,如 Re…

作者头像 李华
网站建设 2026/4/10 18:42:27

39、SQL Server管理与监控全解析

SQL Server管理与监控全解析 1. 服务器端代码管理 在SQL Server中,创建T - SQL服务器端代码,如存储过程、视图、函数和触发器后,可能需要对其进行修改或删除。每种对象类型都支持与CREATE语法对应的ALTER和DROP T - SQL版本。 当使用ALTER修改服务器端编程对象(如存储过…

作者头像 李华