Greasy Fork

Greasy Fork is available in English.

百度网盘视频倍速播放

简单的倍速播放脚本,小白作品,欢迎提意见

目前为 2020-06-19 提交的版本,查看 最新版本

// ==UserScript==
// @name         百度网盘视频倍速播放
// @description  简单的倍速播放脚本,小白作品,欢迎提意见
// @version      1.4.0
// @author       vikiboss (https://github.com/vikiboss)
// @create       2020/6/15
// @lastmodified 2020/6/19
// @feedback-url https://github.com/Vikiboss/baidupan-playspeed-control/issues
// @icon         https://i.loli.net/2020/06/19/eWDyG1RhCBkTINl.png
// @homepageURL  http://greasyfork.icu/zh-CN/scripts/405388
// @github       https://github.com/vikiboss/baidupan-playspeed-control
// @namespace    baidupan-playspeed-control
// @license      MIT
// @run-at       document-end
// @grant        none
// @include      *://pan.baidu.com/s*
// @include      *://pan.baidu.com/play*
// @include      *://pan.baidu.com/disk/home*
// @include      *://yun.baidu.com/s*
// @include      *://yun.baidu.com/disk/home*
// ==/UserScript==

(function () {
  'use strict';
  // === 随窗口加载后调用本方法 ===
  window.onload = function () {
    // === 按钮集 ===
    var options = [
      { str: 'x0.5', rate: 0.5 },
      { str: 'x1.0', rate: 1.0 },
      { str: 'x1.5', rate: 1.5 },
      { str: 'x2.0', rate: 2.0 },
      { str: '加速' },
      { str: '减速' },
      { str: '自定义' },
    ];
    let player; // 播放区节点
    var label; // 显示倍速label
    var vip_div; // svip提示框
    var btn_div; // 按钮容器

    // === 定义生成"倍速按钮"的函数 ===
    var generateBtn = (rateStr, rate) => {
      var btn = document.createElement('a');
      btn.className = 'g-button'; // 加上类
      btn.setAttribute('title', '调节播放速度');
      rate = rate || 1.0;
      btn.onclick = () => {
        player = window.videojs.getPlayers('video-player').html5player.tech_;
        var curRate = player.playbackRate();
        // 判断options提供的字符串并对rate进行相应操作
        switch (rateStr) {
          case '自定义':
            rate = prompt('请输入0-5的播放速率:') || curRate;
            rate = rate <= 0 || rate > 5 ? curRate : rate;
            break;
          case '加速':
            rate = curRate <= 0 ? 0.1 : curRate + 0.1;
            break;
          case '减速':
            rate = curRate <= 0 ? 0.1 : curRate - 0.1;
        }
        player.setPlaybackRate(rate);
        label.innerText = `当前倍速: ${Number(rate).toFixed(1)}`;
      };
      // 补充按钮内部文本与样式
      var btnInnerHtml = `<span class="g-button-right">
          <em class="icon icon-speed"></em>
          <span class="text" style="width: auto;">${rateStr}</span>
        </span>`;
      btn.innerHTML = btnInnerHtml;
      btn.style.userSelect = 'none';
      return btn;
    };

    // === 插入倍速按钮集 ===
    btn_div = document.getElementsByClassName('video-toolbar-buttonbox')[0];
    var btns = options.map((option) => generateBtn(option.str, option.rate));
    btn_div.append(...btns);

    // === 加入倍速显示 ===
    label = document.createElement('span');
    label.innerText = `当前倍速: 1.0`;
    label.style.color = '#09aaff';
    label.style.fontSize = '18px';
    label.style.display = 'inline-block';
    label.style.margin = '5px';
    label.style.fontFamily = 'Microsoft YaHei';
    var br = document.createElement('br');
    btn_div.append(br);
    btn_div.append(label);

    // === 去除多余元素 调整布局 ===
    var other_div = document.getElementsByClassName('video-other-video')[0];
    other_div.style.paddingTop = '50px';
    vip_div = document.getElementsByClassName('privilege-box')[0];
    vip_div.style.display = 'none';
    btn_div.childNodes[1].style.display = 'none';
    btn_div.childNodes[2].style.display = 'none';
    btn_div.childNodes[3].style.display = 'none';
  };
})();