Greasy Fork

Greasy Fork is available in English.

优化百度网盘在线播放

自动加载高清画质;添加倍速播放,数字键1,2,3分别对应1,2,3倍速,4为1.5倍速,5为开启画中画模式; '[' 上一集; ']' 下一集。

当前为 2024-06-11 提交的版本,查看 最新版本

// ==UserScript==
// @name         优化百度网盘在线播放
// @namespace    http://tampermonkey.net/
// @description  自动加载高清画质;添加倍速播放,数字键1,2,3分别对应1,2,3倍速,4为1.5倍速,5为开启画中画模式; '[' 上一集; ']' 下一集。
// @author       You
// @match        https://pan.baidu.com/*
// @icon         https://nd-static.bdstatic.com/m-static/v20-main/favicon-main.ico
// @grant        none
// @license      MIT
// @version      2024-06-11
// ==/UserScript==

(function () {
  window.addEventListener("keydown", (e) => {
    if (e.ctrlKey || ![49, 50, 51, 52, 53, 219, 221].includes(e.keyCode))
      return;
    var video = document.querySelector("video");
    const controlBtns = document.querySelectorAll(
      ".vp-video__control-bar--play .vp-video__control-bar--button-group"
    );
    if (!video || !controlBtns.length) return;
    switch (e.keyCode) {
      case 49:
        video.playbackRate = 1;
        break;
      case 50:
        video.playbackRate = 2;
        break;
      case 51:
        video.playbackRate = 3;
        break;
      case 52:
        video.playbackRate = 1.5;
        break;
      case 53:
        togglePictureInPictureMode(video);
        break;
      case 219:
        controlBtns[1]
          .querySelector(".vp-video__control-bar--button")
          .click();
        break;
      case 221:
        controlBtns[2]
          .querySelector(".vp-video__control-bar--button")
          .click();
        break;
    }
  });
  const togglePictureInPictureMode = async (video) => {
    if (video !== document.pictureInPictureElement) {
      await video.requestPictureInPicture();
    } else {
      await document.exitPictureInPicture();
    }
  };
  const mutation = new MutationObserver((mutation) => {
    for (let m of mutation) {
      if (m.target.classList && m.target.classList.contains("vjs-tech")) {
        const btns = document.querySelectorAll(
          ".vp-video__control-bar--video-resolution .vp-video__control-bar--video-button"
        );
        if (!btns.length) return;
        const highDefinitionBtn = btns[1].querySelector("button");
        highDefinitionBtn && highDefinitionBtn.click();
        break;
      }
    }
  });
  const config = {
    childList: true,
    attributes: true,
    subtree: true,
  };
  mutation.observe(document.body, config);
})();