点击换一换后推荐的内容就再也找不到了? 没关系既然能换走,现在也能换回来
// ==UserScript==
// @name BiliBili换一换,换回来
// @namespace https://greasyfork.org/scripts/478516-bilibili%E6%8D%A2%E4%B8%80%E6%8D%A2-%E6%8D%A2%E5%9B%9E%E6%9D%A5/code/BiliBili%E6%8D%A2%E4%B8%80%E6%8D%A2,%E6%8D%A2%E5%9B%9E%E6%9D%A5.user.js
// @version 2024.09.2601
// @description 点击换一换后推荐的内容就再也找不到了? 没关系既然能换走,现在也能换回来
// @author CNGEGE
// @match https://www.bilibili.com/
// @match https://www.bilibili.com/index.html
// @match https://www.bilibili.com/?*
// @icon data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMTYgMTYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iY3VycmVudENvbG9yIiBzdHlsZT0idHJhbnNmb3JtOiByb3RhdGUoLTY0ODBkZWcpOyI+PHBhdGggZD0iTTguNjI0OTMzMzMzMzMzMzMzIDEzLjY2NjY2NjY2NjY2NjY2NkM4LjYyNDkzMzMzMzMzMzMzMyAxNC4wMTE4NDk5OTk5OTk5OTkgOC4zNDUxMjUgMTQuMjkxNjY2NjY2NjY2NjY2IDcuOTk5OTMzMzMzMzMzMzMzIDE0LjI5MTY2NjY2NjY2NjY2NkM0LjUyNTE2NjY2NjY2NjY2NiAxNC4yOTE2NjY2NjY2NjY2NjYgMS43MDgyOTMzMzMzMzMzMzMyIDExLjQ3NDc5MTY2NjY2NjY2NSAxLjcwODI5MzMzMzMzMzMzMzIgOEMxLjcwODI5MzMzMzMzMzMzMzIgNi4wMTMzMDgzMzMzMzMzMzMgMi42Mjk4MjUgNC4yNDE0MjMzMzMzMzMzMzM1IDQuMDY2MzIxNjY2NjY2NjY3IDMuMDg5Mzg1QzQuMzM1NjAzMzMzMzMzMzMzIDIuODczNDI4MzMzMzMzMzMzNSA0LjcyODk1OTk5OTk5OTk5OSAyLjkxNjY1MzMzMzMzMzMzMzUgNC45NDQ5MTUgMy4xODU5MzQ5OTk5OTk5OTk3QzUuMTYwODcxNjY2NjY2NjY2IDMuNDU1MjA5OTk5OTk5OTk5NyA1LjExNzY0NjY2NjY2NjY2NjUgMy44NDg1NzMzMzMzMzMzMzMgNC44NDgzNjY2NjY2NjY2NjYgNC4wNjQ1MjgzMzMzMzMzMzM1QzMuNjk0OTc1IDQuOTg5NTMgMi45NTgyOTMzMzMzMzMzMzI4IDYuNDA4NTIgMi45NTgyOTMzMzMzMzMzMzI4IDhDMi45NTgyOTMzMzMzMzMzMzI4IDEwLjc4NDQxNjY2NjY2NjY2NyA1LjIxNTUyODMzMzMzMzMzMyAxMy4wNDE2NjY2NjY2NjY2NjYgNy45OTk5MzMzMzMzMzMzMzMgMTMuMDQxNjY2NjY2NjY2NjY2QzguMzQ1MTI1IDEzLjA0MTY2NjY2NjY2NjY2NiA4LjYyNDkzMzMzMzMzMzMzMyAxMy4zMjE0ODMzMzMzMzMzMzMgOC42MjQ5MzMzMzMzMzMzMzMgMTMuNjY2NjY2NjY2NjY2NjY2ek0xMS4wNjA0NzUgMTIuODEwNTU4MzMzMzMzMzMzQzEwLjg0NDIyNTAwMDAwMDAwMiAxMi41NDE1NTgzMzMzMzMzMzEgMTAuODg3MDMzMzMzMzMzMzM1IDEyLjE0ODEyNSAxMS4xNTYwNDE2NjY2NjY2NjcgMTEuOTMxODc1QzEyLjMwNjg1ODMzMzMzMzMzMyAxMS4wMDY3NzUgMTMuMDQxNTk5OTk5OTk5OTk5IDkuNTg5NDI0OTk5OTk5OTk5IDEzLjA0MTU5OTk5OTk5OTk5OSA4QzEzLjA0MTU5OTk5OTk5OTk5OSA1LjIxNTU2MTY2NjY2NjY2NiAxMC43ODQ0MDgzMzMzMzMzMzIgMi45NTgzMzMzMzMzMzMzMzMgNy45OTk5MzMzMzMzMzMzMzMgMi45NTgzMzMzMzMzMzMzMzNDNy42NTQ4MDgzMzMzMzMzMzI1IDIuOTU4MzMzMzMzMzMzMzMzIDcuMzc0OTMzMzMzMzMzMzMzIDIuNjc4NTA4MzMzMzMzMzMzMyA3LjM3NDkzMzMzMzMzMzMzMyAyLjMzMzMzMzMzMzMzMzMzM0M3LjM3NDkzMzMzMzMzMzMzMyAxLjk4ODE1MzMzMzMzMzMzMzIgNy42NTQ4MDgzMzMzMzMzMzI1IDEuNzA4MzMzMzMzMzMzMzMzMyA3Ljk5OTkzMzMzMzMzMzMzMyAxLjcwODMzMzMzMzMzMzMzMzNDMTEuNDc0NzI1MDAwMDAwMDAxIDEuNzA4MzMzMzMzMzMzMzMzMyAxNC4yOTE1OTk5OTk5OTk5OTkgNC41MjUyMDY2NjY2NjY2NjcgMTQuMjkxNTk5OTk5OTk5OTk5IDhDMTQuMjkxNTk5OTk5OTk5OTk5IDkuOTg0MTA4MzMzMzMzMzMzIDEzLjM3MjQ4MzMzMzMzMzMzMiAxMS43NTM5NTgzMzMzMzMzMzIgMTEuOTM5MjI1IDEyLjkwNjEyNUMxMS42NzAxNjY2NjY2NjY2NjMgMTMuMTIyMzc1IDExLjI3NjcyNSAxMy4wNzk2MjUgMTEuMDYwNDc1IDEyLjgxMDU1ODMzMzMzMzMzM3oiIGZpbGw9ImN1cnJlbnRDb2xvciI+PC9wYXRoPjxwYXRoIGQ9Ik0xLjM3NSAzLjQxMzA4NjY2NjY2NjY2NjZDMS4zNzUgMy4wNjc5MDY2NjY2NjY2NjY2IDEuNjU0ODI1IDIuNzg4MDg2NjY2NjY2NjY2NiAyIDIuNzg4MDg2NjY2NjY2NjY2Nkw0LjMzMzMzMzMzMzMzMzMzMyAyLjc4ODA4NjY2NjY2NjY2NjZDNC44NjI2MDgzMzMzMzMzMzMgMi43ODgwODY2NjY2NjY2NjY2IDUuMjkxNjY2NjY2NjY2NjY2IDMuMjE3MTQ0OTk5OTk5OTk5NSA1LjI5MTY2NjY2NjY2NjY2NiAzLjc0NjQxOTk5OTk5OTk5OTZMNS4yOTE2NjY2NjY2NjY2NjYgNi4wNzk3NTMzMzMzMzMzMzRDNS4yOTE2NjY2NjY2NjY2NjYgNi40MjQ5MjgzMzMzMzMzMzQgNS4wMTE4NDE2NjY2NjY2NjYgNi43MDQ3MzY2NjY2NjY2NjYgNC42NjY2NjY2NjY2NjY2NjYgNi43MDQ3MzY2NjY2NjY2NjZDNC4zMjE0OTE2NjY2NjY2NjcgNi43MDQ3MzY2NjY2NjY2NjYgNC4wNDE2NjY2NjY2NjY2NjYgNi40MjQ5MjgzMzMzMzMzMzQgNC4wNDE2NjY2NjY2NjY2NjYgNi4wNzk3NTMzMzMzMzMzMzRMNC4wNDE2NjY2NjY2NjY2NjYgNC4wMzgwODY2NjY2NjY2NjdMMiA0LjAzODA4NjY2NjY2NjY2N0MxLjY1NDgyNSA0LjAzODA4NjY2NjY2NjY2NyAxLjM3NSAzLjc1ODI2MTY2NjY2NjY2NjQgMS4zNzUgMy40MTMwODY2NjY2NjY2NjY2eiIgZmlsbD0iY3VycmVudENvbG9yIj48L3BhdGg+PHBhdGggZD0iTTE0LjYyNSAxMi41ODY0QzE0LjYyNSAxMi45MzE1OTE2NjY2NjY2NjYgMTQuMzQ1MTgzMzMzMzMzMzMzIDEzLjIxMTQgMTQgMTMuMjExNEwxMS42NjY2NjY2NjY2NjY2NjYgMTMuMjExNEMxMS4xMzc0MDgzMzMzMzMzMzUgMTMuMjExNCAxMC43MDgzMzMzMzMzMzMzMzIgMTIuNzgyMzgzMzMzMzMzMzMyIDEwLjcwODMzMzMzMzMzMzMzMiAxMi4yNTMwNjY2NjY2NjY2NjVMMTAuNzA4MzMzMzMzMzMzMzMyIDkuOTE5NzMzMzMzMzMzMzMzQzEwLjcwODMzMzMzMzMzMzMzMiA5LjU3NDYwODMzMzMzMzMzNCAxMC45ODgxNSA5LjI5NDczMzMzMzMzMzMzMyAxMS4zMzMzMzMzMzMzMzMzMzIgOS4yOTQ3MzMzMzMzMzMzMzNDMTEuNjc4NTE2NjY2NjY2NjY3IDkuMjk0NzMzMzMzMzMzMzMzIDExLjk1ODMzMzMzMzMzMzMzMiA5LjU3NDYwODMzMzMzMzMzNCAxMS45NTgzMzMzMzMzMzMzMzIgOS45MTk3MzMzMzMzMzMzMzNMMTEuOTU4MzMzMzMzMzMzMzMyIDExLjk2MTRMMTQgMTEuOTYxNEMxNC4zNDUxODMzMzMzMzMzMzMgMTEuOTYxNCAxNC42MjUgMTIuMjQxMjc1MDAwMDAwMDAyIDE0LjYyNSAxMi41ODY0eiIgZmlsbD0iY3VycmVudENvbG9yIj48L3BhdGg+PC9zdmc+
// @grant none
// @license Apache 2
// @require https://code.jquery.com/jquery-3.7.1.min.js
// @run-at document-end
// ==/UserScript==
(function() {
'use strict';
// 全局变量
/* 换一换 按钮 */
let roll_btn = $("button.primary-btn.roll-btn"); // 自然 一开始是没有的
let back_btn = {}; // 脚本创建的按钮
let historyItem = [];// 用于记录的历史视频
let currentBatch = 0;
let rotete = 0; // 用于旋转动画的 记录的旋转角度
main();
/* 主方法 */
function main(){
// 首先我要延迟循环去查找 换一换按钮, 因为这个按钮是JS动态载入的
let loopid = setInterval(()=>{
// 获取
roll_btn = $("button.primary-btn.roll-btn svg path");
if(roll_btn.length > 0){
roll_btn = $("button.primary-btn.roll-btn");
roll_btn_load();
clearInterval(loopid);
}
},500);
}
/* 原始的换一换按钮载入了 */
function roll_btn_load(){
// 两件事
/* 1. 复制按钮*/
back_btn = roll_btn.clone();
back_btn.addClass("back-btn");
back_btn.css("margin-top","10px");
back_btn.find("span").text("换回来");
roll_btn.after(back_btn);
/* 2. 监听原始按钮点击*/
roll_btn.click(roll_btn_click);
/* 3. 监听复制后按钮的点击 */
back_btn.mousedown(back_btn_click);
/* 4. 屏蔽复制后按钮的默认右键事件 */
//back_btn.
back_btn.bind("contextmenu",function(e){
return false;
});
}
/* 原始的换一换按钮点击事件 */
function roll_btn_click(event){
//在切换前将项目记录下来
let olditem = $("div.container").find(".feed-card");
if(olditem.length > 0){
for(let i=0;i<olditem.length;i++){
historyItem[currentBatch * olditem.length + i] = $(olditem[i]).find(".bili-video-card").clone();
}
currentBatch++;
// 修改换回来按钮的悬浮提示文字
updateTitle();
}
else{
console.error("准备记录时,没有找到视频节点");
}
}
/* 复制后的换回来按钮的点击事件 */
function back_btn_click(event){
if(event.which == 1){ //左键
// 反向旋转图标
rotete-=720;
back_btn.find("svg").css("transform","rotate("+rotete+"deg)");
//复原项目
if(historyItem.length > 0 && currentBatch > 0){
currentBatch--;
let olditem = $("div.container").find(".feed-card");
for(let i=0;i<olditem.length;i++){
// 先把原来的remove掉
$(olditem[i]).find(".bili-video-card").remove();
$(olditem[i]).append(historyItem[currentBatch * olditem.length + i]);
}
updateTitle();
}
}else if(event.which == 3){ // 右键
currentBatch = 0;
for(let i=0;i<historyItem.length;i++){
delete history[i];
historyItem[i] = null;
}
historyItem = [];
back_btn.removeAttr("title");
}
}
/* 修改换回来按钮的悬浮提示文字 */
function updateTitle(){
back_btn.attr("title",`当前队列:${currentBatch} 缓存项目大小:${historyItem.length} "右键清除缓存 释放内存"`);
}
// Your code here...
})();