您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Customize the appearance of verified accounts on X.com with adjustable settings
// ==UserScript== // @name X.com Verified Accounts Customizer // @namespace http://tampermonkey.net/ // @version 1.0 // @description Customize the appearance of verified accounts on X.com with adjustable settings // @author dursunator // @match *://*.x.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=x.com // @grant GM_getValue // @grant GM_setValue // @grant GM_registerMenuCommand // ==/UserScript== (function() { 'use strict'; const defaultSettings = { opacity: 0.5, zoom: 0.75, enabled: true }; let settings = GM_getValue('verifiedAccountSettings', defaultSettings); applySettings(); GM_registerMenuCommand('Edit Settings', showSettingsPanel); function applySettings() { const oldStyle = document.getElementById('x-verified-customizer'); if (oldStyle) { oldStyle.remove(); } if (!settings.enabled) return; const styleElement = document.createElement('style'); styleElement.id = 'x-verified-customizer'; styleElement.innerHTML = ` article[data-testid="tweet"]:has([data-testid="icon-verified"]) { opacity: ${settings.opacity}; zoom: ${settings.zoom}; } `; document.querySelector("head").appendChild(styleElement); } function showSettingsPanel() { if (document.getElementById('x-settings-panel')) return; const panel = document.createElement('div'); panel.id = 'x-settings-panel'; panel.style.cssText = ` position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: #15202B; color: #E7E9EA; border-radius: 12px; padding: 24px; z-index: 10000; box-shadow: 0 0 20px rgba(0,0,0,0.7); min-width: 320px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; `; const heading = document.createElement('h2'); heading.textContent = 'Verified Account Settings'; heading.style.cssText = ` margin-top: 0; color: #1D9BF0; border-bottom: 1px solid #38444D; padding-bottom: 12px; font-size: 20px; `; panel.appendChild(heading); const enabledDiv = document.createElement('div'); enabledDiv.style.margin = '16px 0'; enabledDiv.style.display = 'flex'; enabledDiv.style.alignItems = 'center'; enabledDiv.style.justifyContent = 'space-between'; const enabledLabel = document.createElement('label'); enabledLabel.textContent = 'Enable Feature: '; enabledLabel.style.fontWeight = '500'; const enabledCheckbox = document.createElement('input'); enabledCheckbox.type = 'checkbox'; enabledCheckbox.checked = settings.enabled; enabledCheckbox.id = 'x-enabled'; enabledCheckbox.style.transform = 'scale(1.2)'; enabledCheckbox.style.accentColor = '#1D9BF0'; enabledDiv.appendChild(enabledLabel); enabledDiv.appendChild(enabledCheckbox); panel.appendChild(enabledDiv); const opacityDiv = document.createElement('div'); opacityDiv.style.margin = '16px 0'; const opacityLabel = document.createElement('label'); opacityLabel.textContent = 'Opacity (0.1 - 1.0): '; opacityLabel.style.display = 'block'; opacityLabel.style.marginBottom = '8px'; opacityLabel.style.fontWeight = '500'; const opacitySliderContainer = document.createElement('div'); opacitySliderContainer.style.display = 'flex'; opacitySliderContainer.style.alignItems = 'center'; const opacityInput = document.createElement('input'); opacityInput.type = 'range'; opacityInput.min = '0.1'; opacityInput.max = '1.0'; opacityInput.step = '0.1'; opacityInput.value = settings.opacity; opacityInput.id = 'x-opacity'; opacityInput.style.flex = '1'; opacityInput.style.accentColor = '#1D9BF0'; const opacityValue = document.createElement('span'); opacityValue.textContent = settings.opacity; opacityValue.style.marginLeft = '10px'; opacityValue.style.backgroundColor = '#253341'; opacityValue.style.padding = '4px 8px'; opacityValue.style.borderRadius = '4px'; opacityValue.style.minWidth = '36px'; opacityValue.style.textAlign = 'center'; opacityInput.addEventListener('input', () => { opacityValue.textContent = opacityInput.value; }); opacitySliderContainer.appendChild(opacityInput); opacitySliderContainer.appendChild(opacityValue); opacityDiv.appendChild(opacityLabel); opacityDiv.appendChild(opacitySliderContainer); panel.appendChild(opacityDiv); const zoomDiv = document.createElement('div'); zoomDiv.style.margin = '16px 0'; const zoomLabel = document.createElement('label'); zoomLabel.textContent = 'Size Ratio (0.5 - 1.0): '; zoomLabel.style.display = 'block'; zoomLabel.style.marginBottom = '8px'; zoomLabel.style.fontWeight = '500'; const zoomSliderContainer = document.createElement('div'); zoomSliderContainer.style.display = 'flex'; zoomSliderContainer.style.alignItems = 'center'; const zoomInput = document.createElement('input'); zoomInput.type = 'range'; zoomInput.min = '0.5'; zoomInput.max = '1.0'; zoomInput.step = '0.05'; zoomInput.value = settings.zoom; zoomInput.id = 'x-zoom'; zoomInput.style.flex = '1'; zoomInput.style.accentColor = '#1D9BF0'; const zoomValue = document.createElement('span'); zoomValue.textContent = settings.zoom; zoomValue.style.marginLeft = '10px'; zoomValue.style.backgroundColor = '#253341'; zoomValue.style.padding = '4px 8px'; zoomValue.style.borderRadius = '4px'; zoomValue.style.minWidth = '36px'; zoomValue.style.textAlign = 'center'; zoomInput.addEventListener('input', () => { zoomValue.textContent = zoomInput.value; }); zoomSliderContainer.appendChild(zoomInput); zoomSliderContainer.appendChild(zoomValue); zoomDiv.appendChild(zoomLabel); zoomDiv.appendChild(zoomSliderContainer); panel.appendChild(zoomDiv); const buttonsDiv = document.createElement('div'); buttonsDiv.style.cssText = ` display: flex; justify-content: space-between; margin-top: 24px; `; const saveButton = document.createElement('button'); saveButton.textContent = 'Save'; saveButton.style.cssText = ` background-color: #1D9BF0; color: white; border: none; padding: 10px 18px; border-radius: 20px; cursor: pointer; font-weight: bold; transition: background-color 0.2s; `; saveButton.addEventListener('mouseover', () => { saveButton.style.backgroundColor = '#1A8CD8'; }); saveButton.addEventListener('mouseout', () => { saveButton.style.backgroundColor = '#1D9BF0'; }); const cancelButton = document.createElement('button'); cancelButton.textContent = 'Cancel'; cancelButton.style.cssText = ` background-color: #273340; color: #E7E9EA; border: none; padding: 10px 18px; border-radius: 20px; cursor: pointer; font-weight: bold; transition: background-color 0.2s; `; cancelButton.addEventListener('mouseover', () => { cancelButton.style.backgroundColor = '#323F4D'; }); cancelButton.addEventListener('mouseout', () => { cancelButton.style.backgroundColor = '#273340'; }); const resetButton = document.createElement('button'); resetButton.textContent = 'Reset'; resetButton.style.cssText = ` background-color: #F4212E; color: white; border: none; padding: 10px 18px; border-radius: 20px; cursor: pointer; font-weight: bold; transition: background-color 0.2s; `; resetButton.addEventListener('mouseover', () => { resetButton.style.backgroundColor = '#E0202B'; }); resetButton.addEventListener('mouseout', () => { resetButton.style.backgroundColor = '#F4212E'; }); buttonsDiv.appendChild(resetButton); buttonsDiv.appendChild(cancelButton); buttonsDiv.appendChild(saveButton); panel.appendChild(buttonsDiv); const overlay = document.createElement('div'); overlay.style.cssText = ` position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0,0,0,0.7); z-index: 9999; `; saveButton.addEventListener('click', () => { settings = { opacity: parseFloat(opacityInput.value), zoom: parseFloat(zoomInput.value), enabled: enabledCheckbox.checked }; GM_setValue('verifiedAccountSettings', settings); applySettings(); overlay.remove(); panel.remove(); }); cancelButton.addEventListener('click', () => { overlay.remove(); panel.remove(); }); resetButton.addEventListener('click', () => { opacityInput.value = defaultSettings.opacity; opacityValue.textContent = defaultSettings.opacity; zoomInput.value = defaultSettings.zoom; zoomValue.textContent = defaultSettings.zoom; enabledCheckbox.checked = defaultSettings.enabled; }); document.body.appendChild(overlay); document.body.appendChild(panel); } const observer = new MutationObserver(() => { applySettings(); }); observer.observe(document.body, { childList: true, subtree: true }); })();