Greasy Fork is available in English.

视频助手

使用键盘控制视频播放

// ==UserScript==
// @name         视频助手
// @namespace    https://github.com/Aoerz/UserScripts
// @version      0.2
// @description  使用键盘控制视频播放
// @author       Aoerz
// @include      https://www.icourse163.org/*
// @include      https://www.xuetangx.com/*
// @include      https://www.coursera.org/*
// @include      https://www.bilibili.com/*
// @include      https://v.qq.com/*
// @include      https://www.iqiyi.com/*
// @include      https://v.youku.com/*
// @grant        none
// ==/UserScript==
(function() {
  "use strict";
  var skipTime = 10;
  var skipVolume = 0.1;
  var volumeTemp;
  function xuetangxAssistant() {
    document.onkeydown = function(e) {
      var evt = e || window.event;
      var v = document.querySelector("video");
      event.preventDefault();
      switch (evt.keyCode) {
        case 90:
        case 37: {
          //left
          if (v.currentTime < skipTime) {
            v.currentTime = 0;
            alert("已到达视频开头,无法快退");
          }
          console.log("快退" + skipTime + "s");
          v.currentTime = v.currentTime - skipTime;
          break;
        }
        case 88:
        case 39: {
          //right
          if (v.currentTime > v.duration - skipTime) {
            alert("已到达视频末尾,无法快进");
            v.currentTime = v.duration;
          }
          console.log("快进" + skipTime + "s");
          v.currentTime = v.currentTime + skipTime;
          break;
        }
        case 68:
        case 38: {
          //up
          if (v.volume > 1 - skipVolume) {
            alert("到达最大音量");
            v.volume = 1;
            break;
          }
          console.log("音量放大" + skipVolume * 100 + "%");
          v.volume = v.volume + 0.1;
          break;
        }
        case 83:
        case 40: {
          //down
          if (v.volume < skipVolume) {
            alert("到达最小音量");
            v.volume = 0;
            break;
          }
          console.log("音量减小" + skipVolume * 100 + "%");
          v.volume = v.volume - skipVolume;
          break;
        }
        case 32: {
          //pause
          if (v.paused) {
            console.log("播放");
            v.play();
          } else {
            console.log("暂停");
            v.pause();
          }
          break;
        }
        case 70: {
          //fullscreen
          if (!document.fullscreenElement) {
            v.requestFullscreen();
          } else {
            if (document.exitFullscreen) {
              document.exitFullscreen();
            }
          }
          break;
        }
        case 77: {
          //muse
          if (v.volume === 0) {
            v.volume = volumeTemp;
          } else {
            volumeTemp = v.volume;
            v.volume = 0;
          }
          break;
        }
        case 36: {
          //home
          v.currentTime = 0;
          break;
        }
        case 35: {
          //end
          v.currentTime = v.duration;
          break;
        }
      }
    };
  }
  xuetangxAssistant();
})();