本帖最后由 GMagels 于 2024-5-15 22:47 编辑
勋章公会里对勋章的表态是有颜色标注的,在表态统计底下,能通过字体的颜色判断具体投了哪个选项。
日志底下也有类似的表态功能,却并没有颜色标标识,直观上只能看到具体的表态分布结果。
那么日志的表态是匿名的吗?
并不是,当你把光标悬停在用户的头像上时,会出现用户具体选择的表态内容的提示框,如图所示:
(为了保护隐私,小锯鳄特地学习了影子分身)
本帖的脚本通过改变对应表态的阴影颜色和用户名的字体颜色,将表态内容更直观的展现出来。
颜色采用了对应表态图片的主颜色,震惊作为最常见的划水项不改变颜色,具体对应如下:
震惊:无颜色,字体默认颜色 感谢:金色 关心:粉红色 加油:蓝色 有爱:红色
效果图
绿色土豆承诺:该脚本只涉及本地网页内容抓取以及页面样式改变,理论上不会主动增加服务器压力!
//@Name @match @icon- // ==UserScript==
- // @name 日志表态显色补丁
- // @namespace https://www.gamemale.com/space-uid-687897.html
- // @version 0.2
- // @description 通过颜色直观地显示日志页面的表态详情
- // @author 瓦尼
- // @match https://www.gamemale.com/blog*
- // @icon https://www.gamemale.com/source/plugin/it618_tieclick/images/love.gif
- // @supportURL https://www.gamemale.com/thread-135135-1-1.html
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- // 用于根据颜色改变特定node的样式
- function changeStyle(node, color){
- // 给头像加上特定颜色的阴影
- node.style.boxShadow = '3px 3px 5px '+ color;
- // 改变用户名的颜色
- node.nextElementSibling.childNodes[0].style.setProperty ('color', color, 'important');
- return 0;
- }
- // 根据表态内容改变样式
- function showVote(){
- let avts = document.getElementsByClassName("avt");
- for (let avt of avts){
- let voteTitle = avt.childNodes[0].title;
- if( voteTitle == '震惊'){
- //changeStyle(avt,'white');
- }else if( voteTitle == '感谢'){
- changeStyle(avt,'Gold');
- }else if( voteTitle == '关心'){
- changeStyle(avt,'HotPink');
- }else if( voteTitle == '加油'){
- changeStyle(avt,'blue');
- }else if( voteTitle == '有爱'){
- changeStyle(avt,'red');
- }
- }
- console.log("执行完毕!");
- return 0;
- }
- // 1.页面进入时触发
- showVote();
- // 2.表态内容发生改变时触发
- // 变化包括但不限于点击表态,翻页表态内容,等等
- // 监听页面变化,所有程序均在本地运行,请放心
- // 选择观察变动的节点
- const targetNode = document.getElementById('click_div');
- // 观察器配置
- const config = { attributes: false, childList: true, subtree: false };
- // 设置计数器,防止出现无限循环
- let changeCount = 0;
- // 当检测到变化时调用的回调函数
- const callback = function(){
- //执行主函数
- showVote();
- // 计数器加一
- changeCount++;
- console.log(`变化次数: ${changeCount}`);
- // 如果变化次数达到一定次,断开观察
- if (changeCount >= 100) {
- console.log('达到设定的变更次数,停止观察。');
- observer.disconnect();
- }
- };
- // 创建一个观察器实例并传入回调函数
- const observer = new MutationObserver(callback);
- // 开始观察目标节点
- // 如果不希望本地持续监听页面,请将下面这行通过添加‘//’前缀,注释掉即可
- observer.observe(targetNode, config);
- })();
复制代码

根据评论区友友的建议,新增文字提示版,非震惊表态除了改变颜色外还会有文字提示,效果如图:
- // ==UserScript==
- // @name 日志表态显色补丁文字提示版
- // @namespace https://www.gamemale.com/space-uid-687897.html
- // @version 0.2
- // @description 通过添加文字直观地显示日志页面的表态详情
- // @author 瓦尼
- // @match https://www.gamemale.com/blog*
- // @icon https://www.gamemale.com/source/plugin/it618_tieclick/images/love.gif
- // @supportURL https://www.gamemale.com/thread-135135-1-1.html
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- // 用于根据颜色改变特定node的样式
- function changeStyle(node, color){
- // 给头像加上特定颜色的阴影
- node.style.boxShadow = '3px 3px 5px '+ color;
- // 改变用户名的颜色
- node.nextElementSibling.childNodes[0].style.setProperty ('color', color, 'important');
- return 0;
- }
- function showVote(){
- let avts = document.getElementsByClassName("avt");
- for (let avt of avts){
- //改变颜色
- let voteTitle = avt.childNodes[0].title;
- if( voteTitle == '震惊'){
- //changeStyle(avt,'white');
- }else if( voteTitle == '感谢'){
- changeStyle(avt,'Gold');
- }else if( voteTitle == '关心'){
- changeStyle(avt,'HotPink');
- }else if( voteTitle == '加油'){
- changeStyle(avt,'blue');
- }else if( voteTitle == '有爱'){
- changeStyle(avt,'red');
- }
- //添加文字提示
- let newElement = document.createElement("p");
- let newContent = document.createTextNode(voteTitle);
- //震惊不显示
- if( voteTitle == '震惊'){
- newContent = document.createTextNode(" ");
- }
- newElement.appendChild(newContent);
- avt.nextElementSibling.after(newElement);
- }
- console.log("执行完毕");
- }
- // 1.页面进入时触发
- showVote();
- // 2.表态内容发生改变时触发
- // 变化包括但不限于点击表态,翻页表态内容,等等
- // 监听页面变化,所有程序均在本地运行,请放心
- // 选择观察变动的节点
- const targetNode = document.getElementById('click_div');
- // 观察器配置
- const config = { attributes: false, childList: true, subtree: false };
- // 设置计数器,防止出现无限循环
- let changeCount = 0;
- // 当检测到变化时调用的回调函数
- const callback = function(){
- //执行主函数
- showVote();
- // 计数器加一
- changeCount++;
- console.log(`变化次数: ${changeCount}`);
- // 如果变化次数达到一定次,断开观察
- if (changeCount >= 100) {
- console.log('达到设定的变更次数,停止观察。');
- observer.disconnect();
- }
- };
- // 创建一个观察器实例并传入回调函数
- const observer = new MutationObserver(callback);
- // 开始观察目标节点
- // 如果不希望本地持续监听页面,请将下面这行通过添加‘//’前缀,注释掉即可
- observer.observe(targetNode, config);
- })();
复制代码 |

如果用过觉得好用的话,欢迎给个免费的追随,有问题随时反馈!
|