YouTube - Seek 1 sec by Ctrl+Arrow key

Ctrl+矢印キーで1秒づつシークします 小数点以下を丸めてシークするのでタイムスタンプの作成に便利です

  1. // ==UserScript==
  2. // @name YouTube - Seek 1 sec by Ctrl+Arrow key
  3. // @namespace https://twitter.com/4chouyou
  4. // @version 0.0.2
  5. // @description Ctrl+矢印キーで1秒づつシークします 小数点以下を丸めてシークするのでタイムスタンプの作成に便利です
  6. // @author mufuuuu
  7. // @match https://www.youtube.com/*
  8. // @grant none
  9. // @noframes
  10. // ==/UserScript==
  11. /* jshint esversion: 6 */
  12.  
  13. (function() {
  14. window.addEventListener('keydown', e => {
  15. let keyCode = e.keyCode;
  16. if(e.ctrlKey) { // Ctrlキーが押下されている
  17. if(!document.activeElement.classList.contains('ytp-volume-panel')) { // 音量調節にフォーカスがない
  18. if(!isInputElement(document.activeElement)) { // 文字入力中ではない
  19. if(e.shiftKey) {
  20. if(keyCode === 37) { // Left arrow key
  21. e.stopImmediatePropagation();
  22. seekVideo(-30); // 30sec戻る
  23. }
  24. if(keyCode === 39) { // Right arrow key
  25. e.stopImmediatePropagation();
  26. seekVideo(30); // 30sec進む
  27. }
  28. }else {
  29. if(keyCode === 37) { // Left arrow key
  30. e.stopImmediatePropagation();
  31. seekVideo(-1); // 1sec戻る
  32. }
  33. if(keyCode === 39) { // Right arrow key
  34. e.stopImmediatePropagation();
  35. seekVideo(1); // 1sec進む
  36. }
  37. }
  38. }
  39. }
  40. }
  41. }, true);
  42.  
  43. function seekVideo(sec) {
  44. let video = document.querySelector('.html5-video-container > video');
  45. if(video) {
  46. let targetTime = Math.max(0, video.currentTime + sec);
  47. targetTime = (sec > 0 || !video.paused) ? Math.floor(targetTime) : Math.ceil(targetTime);
  48. video.currentTime = targetTime;
  49. }
  50. }
  51.  
  52. function isInputElement(target) {
  53. let element = target;
  54. if(element.nodeType == 3) element = element.parentNode;
  55. return (element.tagName == 'INPUT' || element.tagName == 'TEXTAREA' || element.getAttribute('contenteditable') == 'true');
  56. }
  57. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址