Greasy Fork

视频播放速度控制

通过按w和s键来控制网页视频的播放速度,并在调整时显示当前播放速度,按r键恢复初始速度

目前为 2024-11-16 提交的版本。查看 最新版本

// ==UserScript==
// @name         视频播放速度控制
// @namespace    http://tampermonkey.net/
// @version      2024-11-16
// @description  通过按w和s键来控制网页视频的播放速度,并在调整时显示当前播放速度,按r键恢复初始速度
// @author       hsq
// @match        *://*/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    let initialPlaybackRate = 1; // 初始播放速度

    // 创建提示框元素
    const speedInfoDiv = document.createElement('div');
    speedInfoDiv.style.position = 'fixed';
    speedInfoDiv.style.top = '10%'; // 垂直靠上
    speedInfoDiv.style.left = '50%'; // 水平居中
    speedInfoDiv.style.transform = 'translateX(-50%)'; // 确保水平居中
    speedInfoDiv.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';
    speedInfoDiv.style.color = 'white';
    speedInfoDiv.style.padding = '10px';
    speedInfoDiv.style.borderRadius = '5px';
    speedInfoDiv.style.fontSize = '16px';
    speedInfoDiv.style.zIndex = '999999'; // 设置更高的 z-index
    speedInfoDiv.innerText = '当前播放速度: 1x';
    document.body.appendChild(speedInfoDiv);
    speedInfoDiv.style.display = 'none'; // 初始时不显示提示框

    // 获取视频元素
    const video = document.querySelector('video');
    if (!video) return;

    // 检测全屏状态并调整提示框位置
    let isFullscreen = false;

    function onFullscreenChange() {
        isFullscreen = document.fullscreenElement !== null;
        if (isFullscreen) {
            speedInfoDiv.style.top = '10%'; // 全屏时,保持提示框的位置
        } else {
            speedInfoDiv.style.top = '10%'; // 正常模式下也放置在这里
        }
    }

    document.addEventListener('fullscreenchange', onFullscreenChange);

    // 监听键盘事件
    document.addEventListener('keydown', function(event) {
        // 按下c键,增加播放速度
        if (event.key === 'c') {
            video.playbackRate += 0.1;
            showSpeedInfo();
        }
        // 按下z键,减小播放速度
        if (event.key === 'z') {
            video.playbackRate -= 0.1;
            showSpeedInfo();
        }
        // 按下x键,恢复初始播放速度
        if (event.key === 'x') {
            video.playbackRate = initialPlaybackRate;
            showSpeedInfo();
        }
    });

    // 显示播放速度提示框
    function showSpeedInfo() {
        speedInfoDiv.innerText = '当前播放速度: ' + video.playbackRate.toFixed(1) + 'x';
        speedInfoDiv.style.display = 'block'; // 显示提示框

        // 1.5秒后隐藏提示框
        setTimeout(function() {
            speedInfoDiv.style.display = 'none';
        }, 1500); // 提示框在1.5秒后消失
    }
})();