您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
可以自定义bilibili 播放倍速,方便学习网课。
当前为
// ==UserScript== // @name B站视频(bilibili )自定义倍速播放 // @namespace http://tampermonkey.net/ // @version 0.2 // @description 可以自定义bilibili 播放倍速,方便学习网课。 // @author 小明 // @match https://www.bilibili.com/video/* // @icon https://www.bilibili.com/favicon.ico // @grant unsafeWindow // @license MIT // @run-at document-end // ==/UserScript== //快捷键一览 //q w e 分别对应点赞投币收藏 // //d 关闭弹幕开启弹幕的 // //f 控制全屏 // //x c 减速,加速 (function() { 'use strict'; document.querySelector('video').playbackRate = 1 //功能1:自定义倍速 document.addEventListener("keydown", keyboard); //功能12:标题简洁 unsafeWindow.onload = function(){ setTimeout(function(){ ptile(); },6000) } })(); //--------------自定义倍速 函数--------------------start function keyboard(event) { let keycode = event.keyCode; let up = 0; //console.info('rate='+document.querySelector('video').playbackRate); //---绑定按键--- if(keycode == 88){//减速 up = 0; }else if(keycode == 67){//加速 up = 1; }else{ return; } //---设置参数--- //调节范围 var rangeArr = [0.5,2.0]; //步进 var step = 0.05; //---设定范围--- var rate = document.querySelector('video').playbackRate; if(rate<rangeArr[0] || rate>rangeArr[1]) return ; //调节速率 if(up==0){ rate = rate - step; }else if(up==1){ rate = rate + step; } rate = rate.toFixed(2); document.querySelector('video').playbackRate = rate; //---显示当前速率--- //console.info('rate='+document.querySelector('video').playbackRate); } //--------------自定义倍速 函数--------------------end //--------------标题简洁 函数--------------------start //标题简洁风 function ptile(){ if(document.getElementById('multi_page') == null){ return; } console.info('---ptile---'); let arr = document.querySelectorAll('.list-box li .part'); let prefix = findPrefix(); for(var i = 0;i<arr.length;i++){ var str = arr[i].innerText; str = str.replace(prefix,''); arr[i].innerText = str; } } //寻找标题公共前缀 function findPrefix(){ var prefix = ''; // NodeList 不是一个数组,是一个类似数组的对象.可以使用 Array.from() 将其转换为数组 var liArr = document.querySelectorAll('.list-box li a'); liArr = Array.from(liArr); var arr = liArr.map( (item, index) => { return item.title }) //console.log("a标签的title集合", arr) if(arr.length>=3){ //随机采样 var index1 = getRndInteger(0,arr.length); var index2 = getRndInteger(0,arr.length); var index3 = getRndInteger(0,arr.length); var s1s2 = [arr[index1],arr[index2]]; var s2s3 = [arr[index2],arr[index3]]; console.info(s1s2); console.info(s2s3); var s1s2_Pre = longestCommonPrefix(s1s2); var s2s3_Pre = longestCommonPrefix(s2s3); if(s1s2_Pre == s2s3_Pre){ prefix = s1s2_Pre; } } return prefix; } //JavaScript 最长公共前缀 function longestCommonPrefix(strs) { if(strs.length == 0) return ""; let ans = strs[0]; for(let i =1;i<strs.length;i++) { let j=0; for(;j<ans.length && j < strs[i].length;j++) { if(ans[j] != strs[i][j]) break; } ans = ans.substr(0, j); if(ans === "") return ans; } return ans; }; //返回 min(包含)~ max(不包含)之间的数字 function getRndInteger(min, max) { return Math.floor(Math.random() * (max - min) ) + min; } //--------------标题简洁 函数--------------------end
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址