Greasy Fork

Greasy Fork is available in English.

B站添加功能

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

当前为 2023-01-19 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         B站添加功能
// @description  1、《不用长按就可以3倍速啦   支持 2.5    3   3.5    4 倍速(2022.11.x》    2、《给出每集剩下的时间-----《只有教程集合才有效》 鬼畜集合的标签是不同的所以无效的,有时候集合也会加载太快导致失败,第二次有了缓存基本就行了,暂时就不改了,我要学习java 55555 js我就是个小白,算是想要优化一下看教程  又觉得自己应该可以 就百度 来完成了(2023.1.18》3、《添加按钮控制《看进度》是否打开2023.1.20》
// @license      AGPL License
// @namespace    http://tampermonkey.net/
// @version      2023.1.20
// @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==


//看进度
    //------------给出每集剩下的时间-----《只有教程集合才有效》 鬼畜集合的标签是不同的所以无效的-------------------------=======================================================
    function lookJinDu(){var element=document.getElementById("multi_page").getElementsByClassName("duration");	//每一集是时间标签

						 var allElement = document.getElementsByClassName("list-box")[0].children;		//视频集合下的全部标签

						 console.log("视频列表共有"+element.length);
								if(element.length==allElement.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';
										para.setAttribute('class','jindu'); //设置标签属性

										//获取父标签---列表
										let list=document.getElementsByClassName("list-box")[0];
										//添加标签
										let listIndex=list.getElementsByTagName("li")[i+1];// 获取父标签的第x个子元素
										list.insertBefore(para,listIndex); // 在父标签的第一个子元素,前插入div标签
									}
                                    document.getElementById("setText").innerText="已打开已看进度";
								}else{//删除存在的进度标签
									var jindu = document.getElementsByClassName("jindu");
									for (let i = jindu.length-1; i>=0;i--){
										jindu[i].remove();
									}
									document.getElementById("setText").innerText="已关闭已看进度";
								}
	}//看进度方法结束------------------------------------------------------------------------------------------------





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);



    //创建一个按钮
    let bt = document.createElement("button");
    //设置id 方便改内容
    bt.setAttribute('id','setText'); //设置标签属性
    //设置标签内容
    bt.innerText="已打开已看进度";
    //设置字体颜色
    bt.style = "position: fixed; right: 0px;bottom: 20px;color:red;";
    //插入父标签下
    document.getElementById("app").appendChild(bt);

    bt.onclick= function(){lookJinDu();};

    lookJinDu();
}