Greasy Fork

Greasy Fork is available in English.

B站添加功能

1、《不用长按就可以3倍速啦 支持 2.5 3 3.5 4 倍速》 2、《给出每集剩下的时间-----《只有教程集合才有效》 鬼畜集合的标签是不同的所以无效的,有时候集合也会加载太快导致失败,第二次有了缓存基本就行了,暂时就不改了,我要学习java 55555 js我就是个小白,算是想要优化一下看教程 又觉得自己应该可以 就百度 来完成了》

目前为 2023-01-17 提交的版本。查看 最新版本

// ==UserScript==
// @name         B站添加功能
// @description  1、《不用长按就可以3倍速啦   支持 2.5    3   3.5    4 倍速》    2、《给出每集剩下的时间-----《只有教程集合才有效》 鬼畜集合的标签是不同的所以无效的,有时候集合也会加载太快导致失败,第二次有了缓存基本就行了,暂时就不改了,我要学习java 55555 js我就是个小白,算是想要优化一下看教程  又觉得自己应该可以 就百度 来完成了》
// @license      AGPL License
// @namespace    http://tampermonkey.net/
// @version      2023.1.18
// @description  try to take over the world!
// @author       You
// @match        *://www.bilibili.com/video/*
// @icon         https://i2.hdslb.com/bfs/face/fc20202a4b53495b05eb702a0f199dbcdc1be5b0.jpg@240w_240h_1c_1s.webp
// @grant        none
// ==/UserScript==

(window.onload=function() {
    function 插入倍速 (速度){
        //创建一个p元素
        var para = document.createElement("li");
        para.setAttribute('class','bpx-player-ctrl-playbackrate-menu-item bpx-state-active'); //设置标签属性
        para.setAttribute('data-value',速度); //设置标签属性
        para.innerText=速度+"x";
        //获取父标签
        var div=document.getElementsByClassName("bpx-player-ctrl-playbackrate-menu")[0];
        //添加标签
       var one=div.firstChild;// 获取父标签的第一个子元素
        div.insertBefore(para,one); // 在父标签的第一个子元素,前插入div标签
    }
    插入倍速(2.5);
    插入倍速(3);
    插入倍速(3.5);
    插入倍速(4);



    //------------给出每集剩下的时间-----《只有教程集合才有效》 鬼畜集合的标签是不同的所以无效的-------------------------=======================================================
    var element=document.getElementById("multi_page").getElementsByClassName("duration");
console.log("视频列表共有"+element.length);

//定义一个数组放每个视频的秒数
var arr = [];
var s_all = 0;
//收集总时长-----//单纯是秒更好处理---------------------------------
for(let i=0;i<element.length;i++){
	let timeStr = element[i].innerHTML;
	let s =0;//记录本次秒
	//console.log(timeStr);
	let times=timeStr.split(":");
	//console.log(times);
	if(times.length==2){
		s=parseInt(times[0]*60);
		s+=parseInt(times[1]);
	}else if(times.length==3){
		s=parseInt(times[0]*60*60);
		s+=parseInt(times[1]*60);
		s+=parseInt(times[2]);
	}else{
		s=parseInt(times[0]);
	}
	s_all+=s;
	arr.push(s);
}


console.log("全部变成秒为"+s_all);

var s_front=0;		//遍历到的时间总和
//对每个 进行处理------------------------------------------------------------------------------------
for(let i=0;i<arr.length;i++){
	s_front+=arr[i];
	//console.log("进度:"+(s_front/s_all*100).toFixed(2)+"%")

	//转换为时分秒---------输出才用  内部用秒就好
	let H=0;
	let m=0;
	let s=0;

	//剩下时间
	s=s_all-s_front;

	m=parseInt(s/60);
	s=s%60;

	H=parseInt(m/60);
	m=m%60;
	//console.log("剩下时间:"+H+"小时"+m+"分"+s+"秒")

	//展示阶段---------------------------------
	//创建一个li标签
    let para = document.createElement("div");
    //设置标签内容
    para.innerText="看完"+(i+1)+"集后  剩下时间:"+H+"小时"+m+"分"+s+"秒  进度:"+(s_front/s_all*100).toFixed(2)+"%";
    //设置字体颜色
    para.style.color = '#d3d3d3';

	//获取父标签---列表
	let list=document.getElementsByClassName("list-box")[0];
	//添加标签
	let listIndex=list.getElementsByTagName("li")[i+1];// 获取父标签的第x个子元素
	list.insertBefore(para,listIndex); // 在父标签的第一个子元素,前插入div标签
}

})();