您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Cycles through video speed values by pressing 'S' on hovered videos with 4chanX
- // ==UserScript==
- // @name Cycle Playback Speed
- // @version 1.1
- // @description Cycles through video speed values by pressing 'S' on hovered videos with 4chanX
- // @author kpganon
- // @license MIT
- // @namespace https://github.com/kpg-anon/scripts
- // @include /^https?:\/\/boards\.4chan(nel)?\.org\/.*\/thread\/.*$/
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- let hoveredVideo = null;
- const playbackSpeeds = [0.25, 0.4, 0.5, 1.0];
- const indicator = document.createElement('div');
- indicator.style.position = 'fixed';
- indicator.style.bottom = '40px';
- indicator.style.right = '10px';
- indicator.style.zIndex = '10000';
- indicator.style.background = 'rgba(0, 0, 0, 0.7)';
- indicator.style.color = 'white';
- indicator.style.padding = '5px 10px';
- indicator.style.borderRadius = '5px';
- indicator.style.display = 'none';
- document.body.appendChild(indicator);
- function updateIndicator() {
- if (hoveredVideo) {
- indicator.textContent = `Playback: ${hoveredVideo.playbackRate}x`;
- }
- }
- function setHoveredVideo(videoElement) {
- hoveredVideo = videoElement;
- indicator.style.display = 'block';
- updateIndicator();
- }
- const observer = new MutationObserver(mutations => {
- mutations.forEach(mutation => {
- mutation.addedNodes.forEach(node => {
- if (node.tagName === 'VIDEO') {
- setHoveredVideo(node);
- }
- });
- });
- });
- observer.observe(document.body, { childList: true, subtree: true });
- document.body.addEventListener('keydown', event => {
- if (event.key === 's' && hoveredVideo) {
- const currentSpeedIndex = playbackSpeeds.indexOf(hoveredVideo.playbackRate);
- let newSpeedIndex = currentSpeedIndex + 1;
- if (newSpeedIndex >= playbackSpeeds.length) {
- newSpeedIndex = 0;
- }
- hoveredVideo.playbackRate = playbackSpeeds[newSpeedIndex];
- updateIndicator();
- }
- });
- document.body.addEventListener('mouseout', event => {
- if (hoveredVideo && (event.relatedTarget === null || event.relatedTarget.nodeName !== 'VIDEO')) {
- hoveredVideo = null;
- indicator.style.display = 'none';
- }
- });
- })();