Greasy Fork is available in English.
Press right key to speed up
当前为
// ==UserScript==
// @name Speed up for Youtube
// @description Press right key to speed up
// @version 1.0
// @author Harry
// @match https://*.youtube.com/*
// @connect googlevideo.com
//<code>@name:zh-CN</code>
// @namespace http://greasyfork.icu/users/662979
// ==/UserScript==
(function () {
'use strict';
let down_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()
down_count++
console.log(down_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 (down_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
}
down_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()
})();