// ==UserScript== // @name 百度网盘视频倍速播放 // @description 简单的倍速播放脚本,小白作品,欢迎提意见 // @version 1.6.2 // @author Viki (or vikiboss) (https://github.com/vikiboss) // @create 2020/6/15 // @lastmodified 2021/3/9 // @feedback-url https://github.com/Vikiboss/baidupan-playspeed-control/issues // @icon https://i.loli.net/2020/06/19/eWDyG1RhCBkTINl.png // @homepageURL https://greasyfork.org/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 *://yun.baidu.com/s* // @include *://pan.baidu.com/m* // @include *://pan.baidu.com/play* // @include *://pan.baidu.com/disk/home* // @include *://yun.baidu.com/disk/home* // @require https://cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js // @require https://cdn.jsdelivr.net/npm/sweetalert@2.1.2/dist/sweetalert.min.js // @downloadURL https://update.greasyfork.icu/scripts/405388/%E7%99%BE%E5%BA%A6%E7%BD%91%E7%9B%98%E8%A7%86%E9%A2%91%E5%80%8D%E9%80%9F%E6%92%AD%E6%94%BE.user.js // @updateURL https://update.greasyfork.icu/scripts/405388/%E7%99%BE%E5%BA%A6%E7%BD%91%E7%9B%98%E8%A7%86%E9%A2%91%E5%80%8D%E9%80%9F%E6%92%AD%E6%94%BE.meta.js // ==/UserScript== (function () { 'use strict'; // === 随窗口加载后调用本方法 === window.onload = function () { // === 按钮集 === let 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: '自定义' }, { str: '设置' }, { str: '关于' }, ]; let player; // 播放区节点 let label; // 显示倍速label let vip_div; // svip提示框 let btn_div; // 按钮容器 let settings = { preRate: 1.0, curRate: 1.0, saveRate: true, showAlert: true, }; // 默认全局配置 let cur_version = '1.6.2'; let last_updated = '2021/3/9'; // === 声明读取配置的函数 === let getSettings = () => { settings.preRate = Number( localStorage.getItem('preRate') ? localStorage.getItem('preRate') : 1.0 ).toFixed(1); settings.curRate = Number( localStorage.getItem('curRate') ? localStorage.getItem('curRate') : 1.0 ).toFixed(1); settings.showAlert = JSON.parse( localStorage.getItem('showAlert') ? localStorage.getItem('showAlert') : true ); settings.saveRate = JSON.parse(localStorage.getItem('saveRate')); }; // === 页面加载完后读取配置 === if (!localStorage.hasOwnProperty('saveRate')) { settings.saveRate = true; localStorage.setItem('saveRate', settings.saveRate); } getSettings(); if (settings.saveRate) { settings.curRate = settings.preRate; localStorage.setItem('curRate', settings.preRate); } else { settings.curRate = 1.0; } // === 判断倍速是否为有效倍速的函数 === let checkRate = (rate) => { if (rate === '' || rate === null) return false; rate = Number(rate); return rate <= 0 || rate > 5 || isNaN(rate) ? false : true; }; // === 定义修改播放倍速的函数 === let setRate = (rate, player) => { if (settings.saveRate) { settings.preRate = rate; localStorage.setItem('preRate', settings.preRate); } let curRate = player.playbackRate(); rate = Number(rate || curRate); if (!checkRate(rate)) return false; label.innerText = `当前: ${Number(rate).toFixed(1)}${ Number(settings.curRate) > 2 ? '(>2容易卡顿)' : '' }`; player.setPlaybackRate(rate); settings.curRate = rate; localStorage.setItem('curRate', settings.curRate); localStorage.setItem('showAlert', settings.showAlert); return true; }; // === 定时器,定期检查倍速 === // 别问我为什么这么写,问就是我太菜了QAQ const check = () => { let player; if (window.videojs) { player = window.videojs.getPlayers('video-player').html5player; } if (player) { setRate(settings.curRate, player.tech_); } }; setInterval(check, 1000); // === 定义生成"倍速按钮"的函数 === let generateBtn = (rateStr, rate) => { let btn = $(``)[0]; rate = rate || 1.0; btn.onclick = () => { if (rateStr === '关于') { // "关于"弹窗 let about = $(`