Skip to content

Instantly share code, notes, and snippets.

@mareku
Last active February 15, 2023 00:53
Show Gist options
  • Save mareku/32897a2cf68d627a513cf336e3102de1 to your computer and use it in GitHub Desktop.
Save mareku/32897a2cf68d627a513cf336e3102de1 to your computer and use it in GitHub Desktop.
html5 video keyboard control
// ==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