您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
图片列表转换为画廊
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.sleazyfork.org/scripts/545309/1639135/GM_Gallery.js
;(function() { window.toGallery = function toGallery(imgList) { document.head.innerHTML = `<title>${document.title}</title>`; document.body.innerHTML = ` <div id="gallery"> ${imgList.map((src, index) => ` <span class="item" data-src="${src}"> <img src="${src}" onload="window.onImgLoaded()"> <div style="text-align: center;">${index + 1}</div> </span> `).join('')} </div> <div id="progress">0/${imgList.length}</div> <div id="mask"><img id="preview"></div> `; document.body.parentElement.scrollTop = 0; const progress = { $progress: document.querySelector('#progress'), loaded: 0, increase() { this.$progress.innerHTML = `${++this.loaded} / ${imgList.length}`; } }; document.querySelectorAll('#gallery img').forEach(($img) => { $img.onload = () => progress.increase(); }); const preview = { $mask: document.querySelector('#mask'), $preview: document.querySelector('#preview'), show(src) { document.body.parentElement.classList.add('is-preview'); this.$preview.src = src; this.$mask.scrollTop = 0; }, hide() { document.body.parentElement.classList.remove('is-preview'); this.$preview.src = '#'; } }; preview.$mask.onclick = () => preview.hide(); document.querySelector('#gallery').onclick = (e) => { const src = e.target.dataset.src; if (src) preview.show(src); }; const style = document.createElement('style'); document.head.appendChild(style); style.innerHTML = ` #gallery { display: flex; flex-flow: row wrap; gap: 10px; padding-bottom: 50px; & .item { align-self: flex-end; cursor: pointer; & * { pointer-events: none; } & img { width: 100px; min-height: 100px; object-fit: contain; background-color: #ccc; transition: all 0.1s; border: 0.5px solid #ccc; } &:hover img { opacity: 0.5; } } } #progress { position: fixed; left: 10px; bottom: 10px; background-color: rgba(0, 0, 0, 0.8); color: #fff; border-radius: 4px; padding: 4px 8px; font-size: 16px; pointer-events: none; } #mask { display: none; position: fixed; left: 0; top: 0; width: 100%; height: 100%; background-color: rgba(255, 255, 255, 0.8); z-index: 1; overflow: auto; text-align: center; } html.is-preview { overflow: hidden; & #mask { display: block; } } `; } })();