您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
获取分P视频剩余时间
// ==UserScript== // @name 计算B站分P视频在自己所看P数的视频剩余时长 // @namespace YuuRa1n // @version 0.6.2 // @description 获取分P视频剩余时间 // @author YuuRa1n // @homepageURL https://greasyfork.org/zh-CN/users/972997-yuura1n // @match https://www.bilibili.com/video/*/?p=* // @grant none // @require https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js // @license MIT // ==/UserScript== (function() { setTimeout(function(){ let html = '<span><span class="item-text sumtime"></span></span>'; $(".video-title").after(html); const videoDataList = $("div.video-data-list"); const videoData = $("div.video-data"); if (videoDataList.length > 0) { console.log("新版本"); html = '<span><span class="item-text lefttime"></span></span>'; videoDataList.append(html); } else if (videoData.length > 0) { console.log("旧版本"); html = '<span><span class="dm lefttime"></span></span>'; videoData.append('   ' + html); } const timeParams = allTimeList(); totalTime(timeParams); lastTime(timeParams); //givenTime(timeParams); }, 2000); $("ul.list-box li").on("click", function(){ lastTime(timeParams); }); })(); function allTimeList(){ // 获取所有的时间列表 const timeList = $("div.duration").toArray().map(function(element) { const time = $(element).text(); const list = time.split(":"); if (list.length === 3) { return { hours: parseInt(list[0], 10), minutes: parseInt(list[1], 10), seconds: parseInt(list[2], 10) }; } else { return { hours: 0, minutes: parseInt(list[0], 10), seconds: parseInt(list[1], 10) }; } }); return timeList; } function totalTime(timeList){ // 计算视频总时长 const sumTime = calcTime(timeList); $("span.sumtime").html("视频总时长:" + sumTime); } function lastTime(timeList){ // 获取当前播放视频位置(第几条)和总视频数 const page = $(".cur-page").text(); const pageNum = page.split("/"); const curPageNum = parseInt(pageNum[0].substring(1), 10); // 计算视频剩余时间 const subTimeList = timeList.slice(curPageNum - 1); const leftTime = calcTime(subTimeList); $("span.lefttime").html("剩余时长:" + leftTime); } function givenTime(timeList){ // 创建样式标签并添加样式 const style = document.createElement('style'); style.innerHTML = ` #number-input-widget { position: fixed; top: 10px; right: 10px; z-index: 9999; background-color: #fff; padding: 10px; border: 1px solid #ccc; border-radius: 5px; } `; document.head.appendChild(style); // 创建部件容器 const widgetContainer = document.createElement('div'); widgetContainer.id = 'number-input-widget'; document.body.appendChild(widgetContainer); // 创建输入框1 const input1 = document.createElement('input'); input1.type = 'number'; input1.placeholder = 'P1'; widgetContainer.appendChild(input1); // 创建输入框2 const input2 = document.createElement('input'); input2.type = 'number'; input2.placeholder = 'P2'; widgetContainer.appendChild(input2); // 创建确定按钮 const button = document.createElement('button'); button.textContent = '确定'; widgetContainer.appendChild(button); // 创建消息框 const messageBox = document.createElement('div'); messageBox.id = 'message-box'; widgetContainer.appendChild(messageBox); // 点击事件处理 button.addEventListener('click', () => { const p1 = parseInt(input1.value); const p2 = parseInt(input2.value); const givenTimeList = timeList.slice(p1 - 1, p2); const gTime = calcTime(givenTimeList); messageBox.textContent = "指定时长:" + gTime; }); } // 给定时间数组和秒数组,数组长度必须相等,计算剩余时间 function calcTime(timeList){ const sum = timeList.reduce(function(acc, time) { return { hours: acc.hours + time.hours, minutes: acc.minutes + time.minutes, seconds: acc.seconds + time.seconds }; }, { hours: 0, minutes: 0, seconds: 0 }); let { hours, minutes, seconds } = sum; minutes += Math.floor(seconds / 60); seconds = seconds % 60; hours += Math.floor(minutes / 60); minutes = minutes % 60; const formattedTime = [hours, minutes, seconds] .map(function(time) { return time < 10 ? "0" + time : time; }) .join(":"); return formattedTime; }