// ==UserScript== // @name Video Player Control Tool 视频播放控制工具 // @namespace http://tampermonkey.net/ // @version 2.1 // @description 视频播放全屏锁屏防误触,同时提供视频控制(快进,暂停,后退) // @author Hui Fei 会飞 // @match *://*.youku.com/* // @match *://*.iqiyi.com/* // @match *://*.iq.com/* // @match *://v.qq.com/* // @match *://*.tudou.com/* // @match *://*.youtube.com/* // @match *://*.bilibili.com/* // @grant none // @license MIT License // @downloadURL none // ==/UserScript== (function() { 'use strict'; const lockButtonHideDelay = 3000; // 3 seconds delay for button hide let hideButtonTimeout; let isLocked = false; let fullscreenElement = null; let video = null; // Create the key-shaped lock element const lockButton = document.createElement('div'); lockButton.id = 'lockButton'; lockButton.style.position = 'fixed'; lockButton.style.left = '0'; lockButton.style.top = '50%'; lockButton.style.transform = 'translateY(-50%)'; lockButton.style.width = '30px'; lockButton.style.height = '30px'; lockButton.style.backgroundColor = 'rgba(128, 128, 128, 0.7)'; lockButton.style.borderRadius = '50%'; lockButton.style.cursor = 'pointer'; lockButton.style.zIndex = '99999'; lockButton.style.display = 'none'; // Initially hidden document.body.appendChild(lockButton); // Create control buttons const fastForwardButton = createButton('>>', 39); // Right Arrow key fastForwardButton.style.top = '10px'; fastForwardButton.style.right = '10px'; fastForwardButton.style.display = 'none'; // Initially hidden document.body.appendChild(fastForwardButton); const playPauseButton = createButton('||>', 32); // Space key playPauseButton.style.top = '10px'; playPauseButton.style.right = '70px'; playPauseButton.style.display = 'none'; // Initially hidden document.body.appendChild(playPauseButton); const rewindButton = createButton('<<', 37); // Left Arrow key rewindButton.style.top = '10px'; rewindButton.style.right = '130px'; rewindButton.style.display = 'none'; // Initially hidden document.body.appendChild(rewindButton); function triggerKeyEvent(element, keyCode, eventType) { const event = new KeyboardEvent(eventType, { bubbles: true, cancelable: true, keyCode: keyCode }); element.dispatchEvent(event); } function createButton(label, keyCode) { const button = document.createElement('button'); button.textContent = label; button.style.position = 'fixed'; button.style.zIndex = 9999; button.style.backgroundColor = 'rgba(255, 255, 255, 0.7)'; button.style.border = '1px solid black'; button.style.padding = '5px'; button.style.borderRadius = '3px'; button.style.width = '40px'; button.style.height = '40px'; button.addEventListener('mousedown', () => triggerKeyEvent(video, keyCode, 'keydown')); button.addEventListener('mouseup', () => triggerKeyEvent(video, keyCode, 'keyup')); return button; } // Lock Screen Button Click Event lockButton.addEventListener('click', function(event) { if (isLocked) { isLocked = false; lockButton.style.backgroundColor = 'gray'; // Unlocked state. document.body.style.pointerEvents = 'auto'; // Enable click events for the page. fastForwardButton.style.pointerEvents = 'auto'; playPauseButton.style.pointerEvents = 'auto'; rewindButton.style.pointerEvents = 'auto'; } else { isLocked = true; lockButton.style.backgroundColor = 'rgba(0, 128, 0, 0.3)'; // Locked State document.body.style.pointerEvents = 'none'; // Disable click events for the entire page. lockButton.style.pointerEvents = 'auto'; // Enable click events for the key. fastForwardButton.style.pointerEvents = 'auto'; playPauseButton.style.pointerEvents = 'auto'; rewindButton.style.pointerEvents = 'auto'; } }); function hideLockButton() { lockButton.style.display = 'none'; fastForwardButton.style.display = 'none'; playPauseButton.style.display = 'none'; rewindButton.style.display = 'none'; } function showLockButton() { lockButton.style.display = 'block'; fastForwardButton.style.display = 'block'; playPauseButton.style.display = 'block'; rewindButton.style.display = 'block'; } function resetHideButtonTimer() { clearTimeout(hideButtonTimeout); hideButtonTimeout = setTimeout(hideLockButton, lockButtonHideDelay); } // Fullscreen change event document.addEventListener('fullscreenchange', function(event) { fullscreenElement = document.fullscreenElement; video = document.querySelector('video'); if (fullscreenElement) { fullscreenElement.appendChild(lockButton); fullscreenElement.appendChild(fastForwardButton); fullscreenElement.appendChild(playPauseButton); fullscreenElement.appendChild(rewindButton); showLockButton(); resetHideButtonTimer(); } else { document.body.appendChild(lockButton); document.body.appendChild(fastForwardButton); document.body.appendChild(playPauseButton); document.body.appendChild(rewindButton); hideLockButton(); clearTimeout(hideButtonTimeout); if (isLocked) { isLocked = false; lockButton.style.backgroundColor = 'gray'; document.body.style.pointerEvents = 'auto'; } } }); // Mouse move event document.addEventListener('mousemove', function() { if (fullscreenElement) { showLockButton(); resetHideButtonTimer(); } }); // Touch start event (for touchscreen devices) document.addEventListener('touchstart', function() { if (fullscreenElement) { showLockButton(); resetHideButtonTimer(); } }); })();