// ==UserScript== // @name 网页缩放调节器(手机适配) // @namespace http://tampermonkey.net/ // @version 1.8 // @description 添加按钮以调节网页缩放,点击主按钮后再显示+-按钮,并添加动画效果,按钮为白色半透明,支持触摸拖动 // @author niming // @match *://*/* // @grant none // @downloadURL none // ==/UserScript== (function() { 'use strict'; // 添加按钮样式 const buttonStyle = ` .zoom-button-container { position: fixed; bottom: 10px; right: 10px; z-index: 9999; display: flex; flex-direction: column; align-items: center; gap: 10px; } .zoom-button { width: 50px; height: 50px; border-radius: 50%; background-color: rgba(255, 255, 255, 0.7); /* White semi-transparent */ color: #333; /* Dark text color */ text-align: center; line-height: 50px; font-size: 18px; cursor: pointer; opacity: 0; pointer-events: none; /* 禁用点击 */ transition: opacity 0.3s ease, transform 0.3s ease; user-select: none; /* 禁用文本选择 */ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); /* 添加阴影 */ } .zoom-button.show { opacity: 1; pointer-events: auto; /* 启用点击 */ transform: translateY(0); } .zoom-button.hide { opacity: 0; pointer-events: none; /* 禁用点击 */ transform: translateY(20px); } .zoom-button:hover { background-color: rgba(255, 255, 255, 0.9); /* Hover效果 */ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3); /* Hover时的阴影 */ } .zoom-button-container.show .zoom-button { animation: slideIn 0.3s forwards; } .zoom-button-container.hide .zoom-button { animation: slideOut 0.3s forwards; } @keyframes slideIn { from { transform: translateY(20px); opacity: 0; } to { transform: translateY(0); opacity: 1; } } @keyframes slideOut { from { transform: translateY(0); opacity: 1; } to { transform: translateY(20px); opacity: 0; } } `; // 将样式添加到页面的头部 const styleElement = document.createElement('style'); styleElement.type = 'text/css'; styleElement.textContent = buttonStyle; document.head.appendChild(styleElement); // 创建按钮容器 const container = document.createElement('div'); container.className = 'zoom-button-container'; document.body.appendChild(container); // 创建缩放按钮 const createButton = (id, text) => { const button = document.createElement('div'); button.id = id; button.className = 'zoom-button'; button.textContent = text; container.appendChild(button); return button; }; // 初始化缩放级别 let zoomLevel = 100; // 更新缩放 const updateZoom = (increment) => { zoomLevel = Math.min(Math.max(zoomLevel + increment, 10), 500); // 限制缩放级别在10%到500%之间 document.body.style.zoom = zoomLevel / 100; }; // 显示或隐藏按钮 const toggleButtons = (show) => { if (show) { zoomInButton.classList.add('show'); zoomInButton.classList.remove('hide'); zoomOutButton.classList.add('show'); zoomOutButton.classList.remove('hide'); } else { zoomInButton.classList.remove('show'); zoomInButton.classList.add('hide'); zoomOutButton.classList.remove('show'); zoomOutButton.classList.add('hide'); } }; // 防抖函数 const debounce = (func, wait) => { let timeout; return (...args) => { clearTimeout(timeout); timeout = setTimeout(() => func.apply(this, args), wait); }; }; // 创建增加缩放按钮并添加事件监听器 const zoomInButton = createButton('zoomIn', '+'); zoomInButton.addEventListener('click', debounce(() => { updateZoom(10); }, 300)); // 创建减少缩放按钮并添加事件监听器 const zoomOutButton = createButton('zoomOut', '-'); zoomOutButton.addEventListener('click', debounce(() => { updateZoom(-10); }, 300)); // 创建主按钮并添加事件监听器 const zoomToggleButton = createButton('zoomToggle', 'Z'); zoomToggleButton.classList.add('show'); zoomToggleButton.addEventListener('click', () => { const isHidden = !zoomInButton.classList.contains('show'); toggleButtons(isHidden); }); // 添加拖动功能 const enableDrag = (element) => { let isDragging = false; let startX, startY, initialX, initialY; element.addEventListener('mousedown', startDrag); element.addEventListener('touchstart', startDrag, { passive: true }); function startDrag(event) { isDragging = true; startX = event.type === 'mousedown' ? event.clientX : event.touches[0].clientX; startY = event.type === 'mousedown' ? event.clientY : event.touches[0].clientY; initialX = element.offsetLeft; initialY = element.offsetTop; document.addEventListener('mousemove', drag); document.addEventListener('touchmove', drag, { passive: false }); document.addEventListener('mouseup', stopDrag); document.addEventListener('touchend', stopDrag); } function drag(event) { if (!isDragging) return; event.preventDefault(); const clientX = event.type === 'mousemove' ? event.clientX : event.touches[0].clientX; const clientY = event.type === 'mousemove' ? event.clientY : event.touches[0].clientY; const dx = clientX - startX; const dy = clientY - startY; element.style.left = initialX + dx + 'px'; element.style.top = initialY + dy + 'px'; } function stopDrag() { isDragging = false; document.removeEventListener('mousemove', drag); document.removeEventListener('touchmove', drag); document.removeEventListener('mouseup', stopDrag); document.removeEventListener('touchend', stopDrag); } }; // 启用容器的拖动功能 enableDrag(container); })();