为MT论坛添加圆角、夜间模式和动画效果,提升浏览体验
// ==UserScript== // @name MT论坛美化 // @namespace http://tampermonkey.net/ // @version 1.0 // @description 为MT论坛添加圆角、夜间模式和动画效果,提升浏览体验 // @author Raymondman // @match https://bbs.binmt.cc/* // @grant GM_setValue // @grant GM_getValue // @license MIT // @supportURL https://bbs.binmt.cc/space-uid-142569.html // ==/UserScript== /* MT论坛美化脚本说明: 功能特性: 1. 圆角美化 - 为论坛各个模块添加现代化的圆角效果 2. 夜间模式 - 提供护眼的深色主题,减少夜间浏览的视觉疲劳 3. 动画效果 - 添加平滑的过渡动画,提升交互体验 4. 设置面板 - 可随时开关各项功能,自定义浏览体验 使用说明: 1. 安装脚本后,页面右下角会出现设置图标 2. 点击设置图标可打开设置面板 3. 可以通过开关分别控制: - 启用脚本:总开关,控制所有功能 - 圆角效果:开启/关闭圆角样式 - 夜间模式:切换明暗主题 - 动画效果:控制过渡动画 更新记录: v1.0 (2024-12-22) - 首次发布 - 实现基础功能:圆角、夜间模式、动画效果 - 添加设置面板 - 优化样式和交互 注意事项: 1. 设置会自动保存在浏览器中 2. 如遇到样式异常,可以尝试刷新页面 3. 可以通过总开关快速关闭所有效果 本脚本由 Cursor AI 辅助开发 https://cursor.sh/ 问题反馈: 如有问题或建议,欢迎通过以下方式反馈: - MT论坛私信:@Raymondman - 在脚本页面评论区留言 */ (function() { 'use strict'; // 获取保存的设置,默认开启 let isScriptEnabled = GM_getValue('isScriptEnabled', true); let isRoundedEnabled = GM_getValue('isRoundedEnabled', true); let isDarkMode = GM_getValue('isDarkMode', false); let isAnimationEnabled = GM_getValue('isAnimationEnabled', true); // 添加CSS样式 const style = document.createElement('style'); style.id = 'roundedCornerStyle'; document.head.appendChild(style); // 创建设置图标 const settingsIcon = document.createElement('div'); settingsIcon.id = 'settingsIcon'; settingsIcon.innerHTML = ` <svg viewBox="0 0 24 24"> <path d="M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z"/> </svg> `; // 创建设置面板 const settingsPanel = document.createElement('div'); settingsPanel.id = 'settingsPanel'; // 更新设置面板内容 settingsPanel.innerHTML = ` <div class="setting-item"> <span>启用脚本</span> <label class="switch"> <input type="checkbox" id="scriptToggle" ${isScriptEnabled ? 'checked' : ''}> <span class="slider"></span> </label> </div> <div class="setting-item ${!isScriptEnabled ? 'disabled' : ''}"> <span>圆角效果</span> <label class="switch"> <input type="checkbox" id="roundedToggle" ${isRoundedEnabled ? 'checked' : ''} ${!isScriptEnabled ? 'disabled' : ''}> <span class="slider"></span> </label> </div> <div class="setting-item ${!isScriptEnabled ? 'disabled' : ''}"> <span>夜间模式</span> <label class="switch"> <input type="checkbox" id="darkModeToggle" ${isDarkMode ? 'checked' : ''} ${!isScriptEnabled ? 'disabled' : ''}> <span class="slider"></span> </label> </div> <div class="setting-item ${!isScriptEnabled ? 'disabled' : ''}"> <span>动画效果</span> <label class="switch"> <input type="checkbox" id="animationToggle" ${isAnimationEnabled ? 'checked' : ''} ${!isScriptEnabled ? 'disabled' : ''}> <span class="slider"></span> </label> </div> <a href="https://bbs.binmt.cc/space-uid-142569.html" target="_blank" class="setting-author"> <img src="https://bbs.binmt.cc/uc_server/avatar.php?uid=142569&size=small" alt="作者头像"> 作者 Raymondman </a> <a href="https://cursor.sh/" target="_blank" class="setting-cursor"> <svg viewBox="0 0 24 24" width="20" height="20"> <path fill="currentColor" d="M13.325 3.05L8.667 20.432l1.932.518 4.658-17.382-1.932-.518zM7.612 18.36l1.36-1.448-.001-.019-5.094-4.78 4.79-5.105-1.447-1.358-6.16 6.563 6.552 6.147zM16.388 18.36l-1.36-1.448.001-.019 5.094-4.78-4.79-5.105 1.447-1.358 6.16 6.563-6.552 6.147z"/> </svg> 本脚本由 Cursor 辅助开发 </a> `; document.body.appendChild(settingsIcon); document.body.appendChild(settingsPanel); // 更新样式函数 function updateStyles() { if (!isScriptEnabled) { style.textContent = ` /* 设置图标基础样式 */ #settingsIcon { position: fixed !important; right: 20px !important; bottom: 80px !important; width: 40px !important; height: 40px !important; background: #fff !important; border-radius: 50% !important; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1) !important; cursor: pointer !important; z-index: 999 !important; display: flex !important; align-items: center !important; justify-content: center !important; } #settingsIcon svg { width: 24px !important; height: 24px !important; } /* 设置面板基础样式 */ #settingsPanel { position: fixed !important; right: 20px !important; bottom: 140px !important; width: 200px !important; background: #fff !important; border-radius: 12px !important; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1) !important; z-index: 999 !important; padding: 15px !important; display: none !important; } #settingsPanel.show { display: block !important; } /* 设置项基础样式 */ .setting-item { display: flex !important; justify-content: space-between !important; align-items: center !important; margin-bottom: 10px !important; } .setting-item.disabled { opacity: 0.5 !important; pointer-events: none !important; } /* 开关基础样式 */ .switch { position: relative !important; display: inline-block !important; width: 40px !important; height: 20px !important; } .switch input { opacity: 0 !important; width: 0 !important; height: 0 !important; } .slider { position: absolute !important; cursor: pointer !important; top: 0 !important; left: 0 !important; right: 0 !important; bottom: 0 !important; background-color: #ccc !important; transition: .4s !important; border-radius: 20px !important; } .slider:before { position: absolute !important; content: "" !important; height: 16px !important; width: 16px !important; left: 2px !important; bottom: 2px !important; background-color: white !important; transition: .4s !important; border-radius: 50% !important; } input:checked + .slider { background-color: #2196F3 !important; } input:checked + .slider:before { transform: translateX(20px) !important; } /* 作者链接基础样式 */ .setting-author { display: flex !important; align-items: center !important; color: #666 !important; font-size: 13px !important; padding: 10px 0 0 !important; text-decoration: none !important; border-top: 1px solid #eee !important; margin-top: 10px !important; } .setting-author img { width: 20px !important; height: 20px !important; border-radius: 50% !important; margin-right: 8px !important; border: 1px solid #eee !important; } `; return; } style.textContent = ` /* 圆角相关样式 */ ${isRoundedEnabled ? ` /* 主要内容框 */ .bm.bmw.cl.widthauto, .bm_h, .bbda, .comiis_bkbox, #settingsPanel, .midaben_signpanel, .comiis_fl_g, .fl_tb, .bm, .fl_g, .toplist_7ree, .boxbg_7ree, .tipinfo_7ree { border-radius: 12px !important; overflow: hidden !important; } /* 版块图标和小图片 */ .fl_icn_g, .fl_icn_g img, .bbda .ec, .bbda .tn, .threadline_7ree img { border-radius: 8px !important; } /* 按钮和标签 */ .tbmu a, .bbda .o, .xl.xl2.cl em, .pn, .pnc, button, input[type="submit"] { border-radius: 4px !important; } /* 头像和圆形元素 */ .bbda .m.avt img, .setting-author img, .kmuser img, #settingsIcon, .avatar, .avt img { border-radius: 50% !important; } /* 搜索框和输入框 */ input[type="text"], textarea, .comiis_search_div { border-radius: 8px !important; } /* 导航菜单 */ .comiis_nvdiv, #comiis_nv { border-radius: 12px !important; overflow: hidden !important; } /* 帖子列表项 */ .threadline_7ree { border-radius: 8px !important; margin: 5px 0 !important; padding: 8px 12px !important; } /* 版块卡片 */ .comiis_fl_g { margin: 5px !important; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1) !important; } /* 提示框 */ .tipinfo_7ree { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1) !important; } /* 设置面板相关 */ #settingsPanel { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1) !important; } #settingsIcon { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1) !important; } /* 开关圆角 */ .slider { border-radius: 20px !important; } .slider:before { border-radius: 50% !important; } ` : ''} /* 动画相关样式 */ ${isAnimationEnabled ? ` /* 基础过渡动画 */ .bm.bmw.cl.widthauto, .bm_h, .bbda, .comiis_bkbox, .midaben_signpanel, .comiis_fl_g, .fl_icn_g, .bbda .ec, .bbda .tn, .tbmu a, .bbda .o, .xl.xl2.cl em, .threadline_7ree, .setting-author, #settingsPanel, .slider, .slider:before, a, input[type="text"], textarea, button, .pn, .pnc { transition-property: all !important; transition-duration: 0.3s !important; transition-timing-function: ease !important; } /* 悬停效果 */ .threadline_7ree:hover { transform: translateX(5px) !important; background: ${isDarkMode ? '#252525' : '#f5f5f5'} !important; } .comiis_fl_g:hover { transform: translateY(-2px) !important; box-shadow: 0 4px 12px rgba(0, 0, 0, ${isDarkMode ? '0.3' : '0.15'}) !important; } .setting-author:hover { transform: translateY(-1px) !important; opacity: 0.8 !important; } /* 按钮悬停效果 */ .pn:hover, .pnc:hover, button:hover { transform: translateY(-1px) !important; box-shadow: 0 4px 12px rgba(33, 150, 243, 0.2) !important; } /* 链接悬停效果 */ a:hover { color: #2196F3 !important; } /* 设置面板动画 */ #settingsPanel { transition: opacity 0.3s ease, transform 0.3s ease, background-color 0.3s ease !important; } #settingsPanel.show { opacity: 1 !important; transform: translateY(0) !important; pointer-events: auto !important; } #settingsPanel:not(.show) { opacity: 0 !important; transform: translateY(10px) !important; pointer-events: none !important; } /* 开关动画 */ .slider { transition: background-color 0.3s ease !important; } .slider:before { transition: transform 0.3s ease !important; } /* 输入框动画 */ input[type="text"]:focus, textarea:focus { box-shadow: 0 0 0 2px rgba(33, 150, 243, 0.2) !important; } /* 版块卡片动画 */ .fl_g:hover { background: ${isDarkMode ? '#252525' : '#f5f5f5'} !important; } /* 设置图标动画 */ #settingsIcon:hover { transform: rotate(30deg) !important; } /* 导航菜单动画 */ .comiis_nv li:hover { background: ${isDarkMode ? '#252525' : '#f5f5f5'} !important; } ` : ''} /* 夜间模式样式 */ ${isDarkMode ? ` /* 基础背景色 */ body, #wp, #ct, .mn, .appl, .wp, .ct2_a, .ct2_a_r, .bm, .bm_h, .tbn, #pt, .comiis_bkbox { background-color: #1a1a1a !important; color: #e0e0e0 !important; } /* 所有卡片背景 */ .bm_c > div, .xl.xl2.cl, .bbda, .comiis_bkbox, #settingsPanel, .comiis_user_info, .midaben_signpanel .fblock, .tbn, .bm, .ct2_a, .comiis_forumlist, .comiis_wzpost, .comiis_search_div, .comiis_forum_threadlist, .comiis_forum_threadlist .comiis_forum_threadlist_list, .comiis_notip { background: #2d2d2d !important; border-color: #3d3d3d !important; } /* 导读表格背景 */ .toplist_7ree { background: #2d2d2d !important; } /* 表格标题行 */ .toptitle_7ree { background: #2d2d2d !important; } .toptitle_7ree td { border-color: #3d3d3d !important; color: #e0e0e0 !important; } /* 表格链接 */ .toptitle_7ree a, .threadline_7ree a, .fl_g dt a, .fl_g dd.kmlineheight em, .fl_g dd a.xi2, .bm_h h2 a, .bm_h .y a { color: #e0e0e0 !important; } /* 链接悬停 */ a:hover { color: #2196F3 !important; } /* 设置面板夜间模式 */ #settingsPanel { background: #2d2d2d !important; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important; } #settingsPanel .setting-item span { color: #e0e0e0 !important; } #settingsPanel .setting-author { color: #999 !important; border-top-color: #3d3d3d !important; } /* 版块图标背景 */ .fl_icn_g { background: #252525 !important; border-color: #3d3d3d !important; } /* 统计数字 */ .xi1, .xi2 { color: #2196F3 !important; } /* 分隔线 */ .pipe, .setting-item, .bbda, .tbn li, .fl_tb td { border-color: #3d3d3d !important; } /* 帖子内容 */ .t_fsz { color: #e0e0e0 !important; } /* 引用块 */ .quote { background: #252525 !important; border-color: #3d3d3d !important; } /* 代码块 */ .blockcode { background: #252525 !important; border-color: #3d3d3d !important; } /* 顶部导航栏 */ .comiis_nvdiv { background: #2d2d2d !important; border-color: #3d3d3d !important; } /* 搜索框 */ input[type="text"], textarea { background: #252525 !important; border-color: #3d3d3d !important; color: #e0e0e0 !important; } /* 按钮 */ .pn, .pnc { background: #2196F3 !important; border-color: #2196F3 !important; color: white !important; } /* 设置图标 */ #settingsIcon { background: #2d2d2d !important; } #settingsIcon svg path { fill: #e0e0e0 !important; } /* 表格悬停效果 */ .fl_g:hover { background: #252525 !important; } /* 版主列表 */ .bm_h .y { color: #999 !important; } /* 帖子数量统计 */ .fl_i { color: #999 !important; } /* 最后发表 */ .fl_by { color: #999 !important; } .fl_by cite { color: #666 !important; } ` : ''} /* 设置图标和面板基础样式 */ #settingsIcon { position: fixed !important; right: 20px !important; bottom: 80px !important; width: 40px !important; height: 40px !important; background: #fff !important; border-radius: 50% !important; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1) !important; cursor: pointer !important; z-index: 999 !important; display: flex !important; align-items: center !important; justify-content: center !important; } #settingsIcon svg { width: 24px !important; height: 24px !important; } #settingsPanel { position: fixed !important; right: 20px !important; bottom: 140px !important; width: 200px !important; background: #fff !important; border-radius: 12px !important; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1) !important; z-index: 999 !important; padding: 15px !important; display: none !important; } #settingsPanel.show { display: block !important; } .setting-item { display: flex !important; justify-content: space-between !important; align-items: center !important; margin-bottom: 10px !important; } .setting-item.disabled { opacity: 0.5 !important; pointer-events: none !important; } .switch { position: relative !important; display: inline-block !important; width: 40px !important; height: 20px !important; } .switch input { opacity: 0 !important; width: 0 !important; height: 0 !important; } .slider { position: absolute !important; cursor: pointer !important; top: 0 !important; left: 0 !important; right: 0 !important; bottom: 0 !important; background-color: #ccc !important; transition: .4s !important; border-radius: 20px !important; } .slider:before { position: absolute !important; content: "" !important; height: 16px !important; width: 16px !important; left: 2px !important; bottom: 2px !important; background-color: white !important; transition: .4s !important; border-radius: 50% !important; } input:checked + .slider { background-color: #2196F3 !important; } input:checked + .slider:before { transform: translateX(20px) !important; } .setting-author { display: flex !important; align-items: center !important; color: #666 !important; font-size: 13px !important; padding: 10px 0 0 !important; text-decoration: none !important; border-top: 1px solid #eee !important; margin-top: 10px !important; } .setting-author img { width: 20px !important; height: 20px !important; border-radius: 50% !important; margin-right: 8px !important; border: 1px solid #eee !important; } /* 分区版主样式 */ .bm_h .y { display: flex !important; flex-wrap: wrap !important; align-items: center !important; gap: 5px !important; } .bm_h .y a { color: ${isDarkMode ? '#999' : '#666'} !important; text-decoration: none !important; padding: 2px 5px !important; border-radius: ${isRoundedEnabled ? '4px' : '0'} !important; transition: ${isAnimationEnabled ? 'all 0.3s ease' : 'none'} !important; } .bm_h .y a:hover { color: #2196F3 !important; background: ${isDarkMode ? '#252525' : '#f5f5f5'} !important; } .bm_h .y .pipe { color: ${isDarkMode ? '#3d3d3d' : '#ddd'} !important; margin: 0 2px !important; } /* 分区标题样式 */ .bm_h h2 { display: flex !important; align-items: center !important; gap: 10px !important; } .bm_h h2 a { color: ${isDarkMode ? '#e0e0e0' : '#333'} !important; font-weight: bold !important; text-decoration: none !important; transition: ${isAnimationEnabled ? 'color 0.3s ease' : 'none'} !important; } .bm_h h2 a:hover { color: #2196F3 !important; } /* Cursor链接样式 */ .setting-cursor { display: flex !important; align-items: center !important; color: #666 !important; font-size: 13px !important; padding: 10px 0 0 !important; text-decoration: none !important; border-top: 1px solid #eee !important; margin-top: 10px !important; transition: ${isAnimationEnabled ? 'all 0.3s ease' : 'none'} !important; } .setting-cursor svg { margin-right: 8px !important; transition: ${isAnimationEnabled ? 'transform 0.3s ease' : 'none'} !important; } .setting-cursor:hover { color: #2196F3 !important; } .setting-cursor:hover svg { transform: scale(1.1) !important; } /* 夜间模式样式 */ ${isDarkMode ? ` .setting-cursor { color: #999 !important; border-top-color: #3d3d3d !important; } ` : ''} `; } // 事件监听器 settingsIcon.addEventListener('click', function() { settingsPanel.classList.toggle('show'); }); document.getElementById('roundedToggle').addEventListener('change', function(e) { isRoundedEnabled = e.target.checked; GM_setValue('isRoundedEnabled', isRoundedEnabled); updateStyles(); }); document.getElementById('darkModeToggle').addEventListener('change', function() { isDarkMode = this.checked; GM_setValue('isDarkMode', isDarkMode); updateStyles(); }); document.getElementById('animationToggle').addEventListener('change', function() { isAnimationEnabled = this.checked; GM_setValue('isAnimationEnabled', isAnimationEnabled); updateStyles(); }); document.getElementById('scriptToggle').addEventListener('change', function() { isScriptEnabled = this.checked; GM_setValue('isScriptEnabled', isScriptEnabled); const toggles = ['roundedToggle', 'darkModeToggle', 'animationToggle']; toggles.forEach(id => { const toggle = document.getElementById(id); toggle.disabled = !isScriptEnabled; toggle.parentElement.parentElement.classList.toggle('disabled', !isScriptEnabled); }); updateStyles(); }); // 初始化 updateStyles(); })();