// ==UserScript== // @name 微信读书(上下滚动模式)沉浸式阅读主题 // @version 1.2.27 // @description 上拉显示头部和侧栏,下拉隐藏,主题切换、侧边栏开关、页面宽度调整、账户信息显示 // @icon https://i.miji.bid/2025/03/15/560664f99070e139e28703cf92975c73.jpeg // @author Grok // @match https://weread.qq.com/web/reader/* // @require https://code.jquery.com/jquery-3.3.1.min.js // @grant GM_setValue // @grant GM_getValue // @grant GM_xmlhttpRequest // @license MIT // @namespace http://github.com/lossj // @downloadURL none // ==/UserScript== (function() { 'use strict'; // 定义主题对象 const themes = { '柔黄': { background: '#E7E6D4', fontColor: '#333333' }, '淡灰': { background: '#E4E4E6', fontColor: '#333333' }, '浅蓝': { background: '#DDE6EF', fontColor: '#333333' }, '暖棕': { background: '#ECE2D9', fontColor: '#333333' }, '清绿': { background: '#DDE8DA', fontColor: '#333333' }, '墨黑': { background: '#1A1E27', fontColor: '#c8c8C8' } }; // 获取或设置存储值 let currentTheme = GM_getValue('currentTheme', '柔黄'); let hideSidebarOnScrollDown = GM_getValue('hideSidebarOnScrollDown', false); let pageWidth = GM_getValue('pageWidth', 1200); // 创建样式元素 const styleSheet = document.createElement('style'); styleSheet.type = 'text/css'; document.head.appendChild(styleSheet); // 函数:动态更新主题样式 function updateThemeStyles() { const customStyle = ` .readerContent, .app_content, .readerChapterContent { font-family: "霞鹜文楷", "PingFang SC", "宋体"; font-size: 18px !important; color: ${themes[currentTheme].fontColor} !important; background-color: ${themes[currentTheme].background} !important; max-width: ${pageWidth}px !important; margin: 0 auto !important; padding: 20px !important; } .readerChapterContent p, .readerChapterContent div, .readerChapterContent span { font-family: inherit; font-size: inherit !important; color: inherit !important; } body, html { background-color: ${themes[currentTheme].background} !important; } .readerTopBar, .navBar { max-width: ${pageWidth}px !important; width: 100% !important; margin-left: auto !important; margin-right: auto !important; position: fixed !important; top: 4px !important; left: 50% !important; transform: translateX(-50%) !important; transition: transform 0.15s ease-out !important; z-index: 1000 !important; backdrop-filter: blur(10px) !important; -webkit-backdrop-filter: blur(10px) !important; background: rgba(255, 255, 255, 0.8) !important; box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1) !important; border-radius: 12px !important; } .readerTopBar.hidden { transform: translateX(-50%) translateY(-115%) !important; } @media (min-width: 768px) { .readerTopBar, .navBar { max-width: ${pageWidth}px !important; left: 50% !important; transform: translateX(-50%) !important; padding: 5px 10px !important; } } .readerControls { position: fixed !important; right: 110px !important; bottom: 200px !important; left: auto !important; transition: opacity 0.3s ease !important; opacity: 1 !important; z-index: 3000 !important; } .readerCatalog { position: fixed !important; left: 50% !important; top: 50% !important; transform: translate(-50%, -50%) !important; right: auto !important; bottom: auto !important; z-index: 3000 !important; margin: 0 !important; width: 560px !important; max-height: 95vh !important; transition: opacity 0.3s ease !important; opacity: 1 !important; background-color: #fff !important; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2) !important; border-radius: 8px !important; } .readerControls.hidden, .readerCatalog.hidden { opacity: 0 !important; } /* 目录和笔记按钮的弹窗样式 */ .readerNotePanel { position: fixed !important; left: 50% !important; top: 10px !important; transform: translateX(-50%) !important; z-index: 2000 !important; width: 560px !important; max-height: 95vh !important; background-color: #fff !important; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2) !important; border-radius: 8px !important; transition: opacity 0.3s ease !important; opacity: 1 !important; } .readerNotePanel.hidden { opacity: 0 !important; } /* 添加的选择工具栏样式 */ .reader_toolbar_content, .reader_toolbar_itemContainer, .toolbarItem, .toolbarItem_text { font-family: "霞鹜文楷", "PingFang SC", "宋体" !important; font-size: 14px !important; color: #DADADB !important; } #themeToggleBtn, #sidebarToggleBtn, #widthAdjustBtn, #accountInfoBtn { position: fixed !important; right: 110px !important; width: 48px !important; height: 48px !important; background-color: #ffffff !important; color: #333 !important; border: none !important; border-radius: 50% !important; cursor: pointer !important; z-index: 4000 !important; display: flex !important; align-items: center !important; justify-content: center !important; font-size: 20px !important; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3) !important; transition: opacity 0.3s ease, background-color 0.3s ease !important; opacity: 1 !important; } /* 深色主题下按钮样式优化 */ body[theme="墨黑"] #themeToggleBtn, body[theme="墨黑"] #sidebarToggleBtn, body[theme="墨黑"] #widthAdjustBtn, body[theme="墨黑"] #accountInfoBtn { background-color: #333333 !important; color: #E0E0E0 !important; box-shadow: 0 2px 5px rgba(255, 255, 255, 0.2) !important; } #accountInfoBtn { bottom: calc(834px) !important; } #themeToggleBtn { bottom: calc(766px) !important; } #sidebarToggleBtn { bottom: calc(698px) !important; } #widthAdjustBtn { bottom: calc(630px) !important; } #themeToggleBtn.hidden, #sidebarToggleBtn.hidden, #widthAdjustBtn.hidden, #accountInfoBtn.hidden { opacity: 0 !important; } #sidebarToggleBtn.active { background-color: #e0e0e0 !important; } body[theme="墨黑"] #sidebarToggleBtn.active { background-color: #555555 !important; } .themeDot { width: 20px; height: 20px; border-radius: 50%; cursor: pointer; border: 2px solid #fff; box-shadow: 0 0 3px rgba(0, 0, 0, 0.3); position: relative; } .themeDot.active { border: 2px solid #000; } body[theme="墨黑"] .themeDot.active { border: 2px solid #E0E0E0 !important; } .themeDot::before { content: attr(title); position: absolute; top: -30px; left: 50%; transform: translateX(-50%); background-color: rgba(0, 0, 0, 0.8); color: #fff; padding: 3px 6px; border-radius: 4px; font-size: 12px; white-space: nowrap; visibility: hidden; opacity: 0; transition: opacity 0.2s ease; z-index: 2001; } .themeDot:hover::before { visibility: visible; opacity: 1; } #themePanel, #widthPanel, #accountPanel { position: fixed !important; background-color: rgba(255, 255, 255, 0.9) !important; padding: 10px !important; border-radius: 8px !important; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2) !important; z-index: 2000 !important; display: none !important; flex-direction: column !important; gap: 10px !important; max-width: 250px !important; backdrop-filter: blur(5px) !important; transition: opacity 0.3s ease, transform 0.3s ease, scale 0.3s ease !important; opacity: 0 !important; transform: translateX(20px) !important; scale: 0.8 !important; } body[theme="墨黑"] #themePanel, body[theme="墨黑"] #widthPanel, body[theme="墨黑"] #accountPanel { background-color: rgba(50, 50, 50, 0.9) !important; color: #E0E0E0 !important; } #themePanel.show, #widthPanel.show, #accountPanel.show { opacity: 1 !important; transform: translateX(0) !important; scale: 1 !important; display: flex !important; } .themeRow { display: flex; flex-direction: row; gap: 8px; flex-wrap: nowrap; justify-content: center; } #widthSlider { -webkit-appearance: none; appearance: none; width: 150px; height: 2px; background: linear-gradient(to right, #000 0%, #000 var(--progress, 0%), #D3D3D3 var(--progress, 0%) 100%); outline: none; border-radius: 1px; cursor: pointer; } body[theme="墨黑"] #widthSlider { background: linear-gradient(to right, #E0E0E0 0%, #E0E0E0 var(--progress, 0%), #555555 var(--progress, 0%) 100%) !important; } #widthSlider::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 8px; height: 8px; background: #333; border-radius: 50%; cursor: pointer; } #widthSlider::-moz-range-thumb { width: 8px; height: 8px; background: #333; border-radius: 50%; cursor: pointer; } body[theme="墨黑"] #widthSlider::-webkit-slider-thumb, body[theme="墨黑"] #widthSlider::-moz-range-thumb { background: #E0E0E0 !important; } #widthLabel { font-size: 14px; color: #333; } body[theme="墨黑"] #widthLabel { color: #E0E0E0 !important; } #accountPanel .data-row { display: flex; justify-content: space-between; min-width: 100px; } #accountPanel .data-label { margin-right: 8px; color: #1A1A1A !important; } #accountPanel .data-value { font-weight: 500; color: #000000 !important; } body[theme="墨黑"] #accountPanel .data-label, body[theme="墨黑"] #accountPanel .data-value { color: #E0E0E0 !important; } @media (max-width: 768px) { #themePanel, #widthPanel, #accountPanel { max-width: 200px; padding: 5px; } #widthSlider { width: 120px; } .themeDot { width: 18px; height: 18px; } .readerControls, #themeToggleBtn, #sidebarToggleBtn, #widthAdjustBtn, #accountInfoBtn { right: 50px !important; } .readerCatalog { width: 400px !important; } } `; styleSheet.innerText = customStyle; console.log('主题样式已更新,当前主题:', currentTheme); } // 初始化样式 updateThemeStyles(); // 设置主题属性 document.body.setAttribute('theme', currentTheme); console.log('当前主题:', currentTheme); // 创建账户信息按钮和面板 const accountInfoBtn = document.createElement('button'); accountInfoBtn.id = 'accountInfoBtn'; accountInfoBtn.innerText = '👤'; document.body.appendChild(accountInfoBtn); console.log('账户信息按钮已创建'); const accountPanel = document.createElement('div'); accountPanel.id = 'accountPanel'; accountPanel.innerHTML = `