// ==UserScript== // @name Fancybox 图片查看器 (支持滚轮缩放) // @namespace http://tampermonkey.net/ // @version 1.1 // @description 图片放大查看效果 // @author 爱吃馍的小张 // @match https://*.hf.space/* // @icon https://www.google.com/s2/favicons?sz=64&domain=hf.space // @grant none // @run-at document-start // @license MIT // ==/UserScript== (function() { 'use strict'; // 1. 注入 Fancybox 的 CSS 和 JS function injectFancybox() { if (document.getElementById('fancybox-css')) return; const css = document.createElement('link'); css.id = 'fancybox-css'; css.rel = 'stylesheet'; css.href = 'https://cdn.jsdelivr.net/npm/@fancyapps/ui@6.1.14/dist/fancybox/fancybox.css'; document.head.appendChild(css); const script = document.createElement('script'); script.id = 'fancybox-js'; script.src = 'https://cdn.jsdelivr.net/npm/@fancyapps/ui@6.1.14/dist/fancybox/fancybox.umd.js'; script.onload = function() { console.log('【Fancybox 6】加载成功,滚轮缩放配置已就绪...'); initForceUnlock(); }; document.head.appendChild(script); } // 2. 核心清洗与手动拉起 function initForceUnlock() { try { const targetNode = document.body; if (!targetNode) return; const config = { childList: true, subtree: true }; const callback = function() { const imgButtons = document.querySelectorAll('button.cursor-zoom-in:not([data-fancy-processed])'); imgButtons.forEach(btn => { btn.setAttribute('data-fancy-processed', 'true'); const img = btn.querySelector('img'); if (!img) return; const pureDiv = document.createElement('div'); pureDiv.className = btn.className.replace('cursor-zoom-in', 'cursor-pointer'); pureDiv.setAttribute('data-fancy-gallery-item', 'true'); const clonedImg = img.cloneNode(true); clonedImg.style.cursor = 'zoom-in'; pureDiv.appendChild(clonedImg); if (btn.parentNode) { btn.parentNode.replaceChild(pureDiv, btn); } pureDiv.addEventListener('click', function(e) { e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); if (!window.Fancybox) return; // 动态收集画廊图片 const galleryItems = document.querySelectorAll('div[data-fancy-gallery-item="true"] img'); const galleryData = []; let startIndex = 0; galleryItems.forEach((item, index) => { galleryData.push({ src: item.src, type: 'image' }); if (item === clonedImg) { startIndex = index; } }); // 呼出 Fancybox 窗口 window.Fancybox.show(galleryData, { startIndex: startIndex, Hash: false, // 【核心修改点】控制鼠标滚轮的行为 // "zoom" 代表滚动滚轮进行放大/缩小 // 如果想换回切图,可以改为 "slide";想换成滚轮关闭,可以改为 "close" wheel: "zoom", Thumbs: { autoStart: true }, Toolbar: { display: { left: ["infobar"], middle: ["zoomIn", "zoomOut", "toggle1to1", "rotateCCW", "rotateCW"], right: ["slideshow", "download", "thumbs", "close"], }, }, }); }, true); }); }; const observer = new MutationObserver(callback); observer.observe(targetNode, config); callback(); } catch (e) { console.error('【Fancybox 6】DOM 替换失败:', e); } } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', injectFancybox); } else { injectFancybox(); } })();