Last active
February 15, 2023 00:53
-
-
Save mareku/32897a2cf68d627a513cf336e3102de1 to your computer and use it in GitHub Desktop.
html5 video keyboard control
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name video keyboard control | |
// @namespace https://github.com/mareku | |
// @version 1.6 | |
// @description html5 video keyboard control | |
// play & Stop = K | |
// Back = J | |
// Advance = L | |
// Mute = M | |
// Speed Down = Z | |
// Speed Riset = X | |
// Speed Up = C | |
// @author mareku | |
// @match * | |
// @include * | |
// @updateURL https://gist.github.com/mareku/32897a2cf68d627a513cf336e3102de1/raw | |
// ==/UserScript== | |
window.addEventListener('load',function () { | |
var vid = document.querySelector('video') || document.getElementsByTagName("video")[0]; | |
if (!vid) { | |
console.log('Not video'); | |
return; | |
} | |
// inputタグなどにフォーカス中のときは無効 | |
if (['input', 'textarea'].includes(document.activeElement.tagName.toLocaleLowerCase())) { | |
return; | |
} | |
var play_toggle = 75, // K | |
back = 74, // J | |
advance = 76, // L | |
mute = 77, // M | |
speed_down_key = 90, // Z | |
speed_riset_key = 88, // X | |
speed_up_key = 67; // C | |
var criteria_speed = 0.25; | |
document.addEventListener('keydown', function(e){ | |
if ( !e.shiftKey || !e.altKey || !e.ctrlKey || !e.metaKey ) { | |
var current_rate = vid.playbackRate; | |
var kcode = e.keyCode | |
switch (kcode) { | |
case back: // back -10s | |
vid.currentTime -= 10; | |
e.preventDefault(); | |
e.stopPropagation(); | |
break; | |
case advance: // advance +10s | |
vid.currentTime += 10; | |
e.preventDefault(); | |
e.stopPropagation(); | |
break; | |
case speed_down_key: // Reproducing Speed Down | |
if (0 < current_rate) { | |
vid.playbackRate -= criteria_speed; | |
} | |
e.preventDefault(); | |
e.stopPropagation(); | |
break; | |
case speed_riset_key: // Reproducing Speed Riset | |
vid.playbackRate = 1; | |
e.preventDefault(); | |
e.stopPropagation(); | |
break; | |
case speed_up_key: // Reproducing Speed Up | |
if (current_rate < 3) { | |
vid.playbackRate += criteria_speed; | |
} | |
e.preventDefault(); | |
e.stopPropagation(); | |
break; | |
case play_toggle: // Play & Stop Toggle | |
if (vid.paused) { | |
vid.play(); | |
} else { | |
vid.pause(); | |
} | |
e.preventDefault(); | |
e.stopPropagation(); | |
break; | |
case mute: // mute | |
if (vid.muted) { | |
vid.muted = false; | |
} else { | |
vid.muted = true; | |
} | |
e.preventDefault(); | |
e.stopPropagation(); | |
break; | |
case 48: | |
case 49: | |
case 50: | |
case 51: | |
case 52: | |
case 53: | |
case 54: | |
case 55: | |
case 56: | |
case 57: | |
// 任意の場所に飛ぶ | |
var num = String.fromCharCode(kcode); | |
vid.currentTime = vid.duration * (num / 10); | |
e.preventDefault(); | |
e.stopPropagation(); | |
break; | |
} | |
} | |
} ,true); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment