// ==UserScript== // @name Speed up for Youtube // @description Press right key to speed up // @version 1.02 // @author Harry // @match https://*.youtube.com/* // @connect googlevideo.com // @namespace https://greasyfork.org/users/662979 // @downloadURL none // ==/UserScript== (function () { 'use strict'; let count = 0 let page_video let speedupKey = 39 let history_rate = 1 const tryPageVideo = () => Array.prototype.find.call(document.getElementsByTagName('video'), e => e.offsetWidth > 9) const getPageVideo = () => { return new Promise(resolve => { const timer = setInterval(() => { const page_video = tryPageVideo() if (page_video) { clearInterval(timer) resolve(page_video) } }, 500); }) }; const checkPageVideo = async () => { if (page_video.offsetWidth <= 9) { page_video = await getPageVideo() if (page_video.offsetWidth <= 9) { return false } } return true } const relativeEvent = { _stopper: e => e.stopPropagation(), } const downEvent_right = async e => { if (e.keyCode !== speedupKey) return e.stopPropagation() count++ if (down_count === 2 && await checkPageVideo()) { relativeEvent.shouldPrevent && relativeEvent.prevent() history_rate = page_video.playbackRate page_video.playbackRate = 3 console.log('speed up for 3x times') } } const upEvent_right = async e => { if (e.keyCode !== speedupKey) return e.stopPropagation() if (count >= 2 && page_video.playbackRate > 1) { page_video.playbackRate = history_rate console.log('cancel speed up') relativeEvent.shouldPrevent && relativeEvent.allow() }else{ page_video.currentTime += 5 } count = 0 } const init = async () => { page_video = await getPageVideo() document.body.addEventListener('keydown', downEvent_right, true) document.body.parentElement.addEventListener('keyup', upEvent_right, true) } init() })();