您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
抖音直播页纯净模式开关,开关滑块样式,带提示和自动隐藏,支持动态加载多个XPath元素隐藏
// ==UserScript== // @name Douyin Live Clean Mode Toggle Switch Style // @namespace http://tampermonkey.net/ // @version 1.8 // @description 抖音直播页纯净模式开关,开关滑块样式,带提示和自动隐藏,支持动态加载多个XPath元素隐藏 // @author Jeff // @match https://live.douyin.com/* // @match https://www.douyin.com/root/live/* // @grant none // @run-at document-idle // @license MIT // ==/UserScript== (function() { 'use strict'; // XPath路径常量 const XPATH_TARGET_1 = '/html/body/div[2]/div[3]/div/main/div[2]/div/pace-island/div/div/div/div[1]/div[7]'; const XPATH_TARGET_2 = '/html/body/div[2]/div[3]/div/main/div[2]/div/pace-island/div/div/div/div[1]/div[2]/div/div[1]/div/div/div/pace-island[11]/div/div/div'; const XPATH_TARGET_3 = '/html/body/div[2]/div[3]/div/main/div[2]/div/pace-island/div/div/div/div[1]/div[1]/div'; // 通用XPath定位函数 function getXPathTarget(path) { return document.evaluate( path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue; } // 创建样式 const style = document.createElement('style'); style.textContent = ` #cleanModeToggleContainer { position: fixed; bottom: 20px; right: 20px; display: flex; align-items: center; gap: 12px; user-select: none; z-index: 999999; transition: opacity 0.5s ease; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; } /* 滑块背景 */ #cleanModeToggle { position: relative; width: 50px; height: 26px; background: #ccc; border-radius: 13px; cursor: pointer; transition: background-color 0.3s; box-sizing: border-box; flex-shrink: 0; } /* 滑块圆球 */ #cleanModeToggle::before { content: ""; position: absolute; top: 2px; left: 2px; width: 22px; height: 22px; background: white; border-radius: 50%; box-shadow: 0 0 3px rgba(0,0,0,0.3); transition: left 0.3s; } /* 开启状态背景 */ #cleanModeToggle.active { background: #28a745; box-shadow: 0 0 8px rgba(40,167,69,0.6); } /* 开启状态滑块位置 */ #cleanModeToggle.active::before { left: 26px; } /* 悬停效果 */ #cleanModeToggle:hover { background: #999; } #cleanModeToggle.active:hover { background: #218838; box-shadow: 0 0 10px rgba(33,136,56,0.8); } /* 提示文字 - 修改颜色 */ #cleanModeToggleTooltip { color: rgba(255, 255, 255, 0.85); font-size: 14px; user-select: none; white-space: nowrap; user-drag: none; text-shadow: 0 0 4px rgba(0, 0, 0, 0.5); } `; document.head.appendChild(style); // 创建容器和滑块、提示文本 const container = document.createElement('div'); container.id = 'cleanModeToggleContainer'; const toggleBtn = document.createElement('div'); toggleBtn.id = 'cleanModeToggle'; const tooltip = document.createElement('div'); tooltip.id = 'cleanModeToggleTooltip'; tooltip.textContent = '纯净模式开关'; container.appendChild(toggleBtn); container.appendChild(tooltip); document.body.appendChild(container); let cleanMode = false; let hideTimeout; // 获取固定id目标元素 function getTargets() { const chatroom = document.getElementById('chatroom'); const rightPanel = document.getElementById('__living_frame_right_panel_id'); let siblingPanel = null; if (rightPanel && rightPanel.parentElement) { siblingPanel = rightPanel.nextElementSibling; } return {chatroom, siblingPanel}; } // 隐藏元素(如果存在且未隐藏) function hideElement(el) { if (el && el.style.display !== 'none') { el.style.display = 'none'; } } // 显示元素(恢复默认显示) function showElement(el) { if (el && el.style.display === 'none') { el.style.display = ''; } } // 切换纯净模式状态 function toggleCleanMode(on) { const {chatroom, siblingPanel} = getTargets(); const xpathTarget1 = getXPathTarget(XPATH_TARGET_1); const xpathTarget2 = getXPathTarget(XPATH_TARGET_2); const xpathTarget3 = getXPathTarget(XPATH_TARGET_3); if (on) { hideElement(chatroom); hideElement(siblingPanel); hideElement(xpathTarget1); hideElement(xpathTarget2); hideElement(xpathTarget3); } else { showElement(chatroom); showElement(siblingPanel); showElement(xpathTarget1); showElement(xpathTarget2); showElement(xpathTarget3); } toggleBtn.classList.toggle('active', on); } // 点击滑块切换事件 toggleBtn.addEventListener('click', () => { cleanMode = !cleanMode; toggleCleanMode(cleanMode); }); // 监听DOM新增,动态隐藏 const observer = new MutationObserver(() => { if (!cleanMode) return; const {chatroom, siblingPanel} = getTargets(); const xpathTarget1 = getXPathTarget(XPATH_TARGET_1); const xpathTarget2 = getXPathTarget(XPATH_TARGET_2); const xpathTarget3 = getXPathTarget(XPATH_TARGET_3); hideElement(chatroom); hideElement(siblingPanel); hideElement(xpathTarget1); hideElement(xpathTarget2); hideElement(xpathTarget3); }); observer.observe(document.body, { childList: true, subtree: true }); // 自动隐藏逻辑 function resetHideTimer() { container.style.opacity = '1'; clearTimeout(hideTimeout); hideTimeout = setTimeout(() => { container.style.opacity = '0'; }, 5000); // 5秒无动作后隐藏 } ['mousemove', 'mousedown', 'keydown', 'touchstart'].forEach(event => { window.addEventListener(event, resetHideTimer, {passive: true}); }); resetHideTimer(); // 页面初始化时关闭纯净模式 toggleCleanMode(cleanMode); })();