Makima 发表于 2026-1-1 20:19:04

【善者神佑】【脚本】快捷切换图片

https://img.gamemale.com/album/202508/19/184944x0tt4fffq8zqhzpv.jpg
点开图片时,按ad或者←→快捷切换图片



@Name @Match

// ==UserScript==
// @name         GM查看图片
// @version      0.1
// @author       MKM
// @match      https://www.gamemale.com/*
// ==/UserScript==


(function() {
    'use strict';

    const config = {
      hotkey: {
            prev: 'ArrowLeft',
            next: 'ArrowRight',
            close: 'Escape',
            prevAlt: 'a',
            nextAlt: 'd'
      }
    };

    function isImageViewerActive() {
      const viewer = document.getElementById('imgzoom');
      if (!viewer) return false;
      const style = window.getComputedStyle(viewer);
      return style.display !== 'none' && style.visibility !== 'hidden';
    }

    function clickPrev() {
      const prevBtn = document.getElementById('zimg_prev');
      if (prevBtn && isImageViewerActive()) {
            prevBtn.click();
      }
    }

    function clickNext() {
      const nextBtn = document.getElementById('zimg_next');
      if (nextBtn && isImageViewerActive()) {
            nextBtn.click();
      }
    }

    function closeViewer() {
      const closeBtn = document.querySelector('#imgzoom .imgclose');
      if (closeBtn && isImageViewerActive()) {
            closeBtn.click();
      }
    }

    function addViewerKeyboardListener() {
      const viewer = document.getElementById('imgzoom');
      if (!viewer || viewer.dataset.keyboardListenerAdded) return;

      viewer.addEventListener('keydown', handleViewerKeyDown, true);
      viewer.dataset.keyboardListenerAdded = 'true';
      viewer.setAttribute('tabindex', '-1');
    }

    function handleViewerKeyDown(e) {
      if (!isImageViewerActive()) return;

      let handled = false;

      switch(e.key) {
            case config.hotkey.prev:
            case config.hotkey.prevAlt:
                e.preventDefault();
                e.stopPropagation();
                e.stopImmediatePropagation();
                clickPrev();
                handled = true;
                break;

            case config.hotkey.next:
            case config.hotkey.nextAlt:
                e.preventDefault();
                e.stopPropagation();
                e.stopImmediatePropagation();
                clickNext();
                handled = true;
                break;

            case config.hotkey.close:
                e.preventDefault();
                e.stopPropagation();
                e.stopImmediatePropagation();
                closeViewer();
                handled = true;
                break;
      }

      if (handled) {
            e.preventDefault();
            e.stopPropagation();
            e.stopImmediatePropagation();
            return false;
      }
    }

    function handleGlobalKeyDown(e) {
      if (!isImageViewerActive()) return;

      const hotkeys = [
            config.hotkey.prev,
            config.hotkey.next,
            config.hotkey.close,
            config.hotkey.prevAlt,
            config.hotkey.nextAlt
      ];

      if (hotkeys.includes(e.key)) {
            e.stopImmediatePropagation();

            switch(e.key) {
                case config.hotkey.prev:
                case config.hotkey.prevAlt:
                  clickPrev();
                  break;
                case config.hotkey.next:
                case config.hotkey.nextAlt:
                  clickNext();
                  break;
                case config.hotkey.close:
                  closeViewer();
                  break;
            }

            return false;
      }
    }

    const observer = new MutationObserver((mutations) => {
      mutations.forEach((mutation) => {
            if (mutation.addedNodes.length) {
                mutation.addedNodes.forEach((node) => {
                  if (node.id === 'imgzoom' || (node.querySelector && node.querySelector('#imgzoom'))) {
                        setTimeout(() => {
                            const viewer = document.getElementById('imgzoom');
                            if (viewer) {
                              addViewerKeyboardListener();
                              viewer.focus();
                            }
                        }, 150);
                  }
                });
            }

            if (mutation.type === 'attributes') {
                const target = mutation.target;
                if (target.id === 'imgzoom' && mutation.attributeName === 'style') {
                  const viewer = document.getElementById('imgzoom');
                  if (viewer && viewer.style.display !== 'none') {
                        setTimeout(() => {
                            addViewerKeyboardListener();
                            viewer.focus();
                        }, 150);
                  }
                }
            }
      });
    });

    observer.observe(document.body, {
      childList: true,
      subtree: true,
      attributes: true,
      attributeFilter: ['style', 'class']
    });

    document.addEventListener('keydown', handleGlobalKeyDown, true);

    if (isImageViewerActive()) {
      setTimeout(() => {
            const viewer = document.getElementById('imgzoom');
            if (viewer) {
                addViewerKeyboardListener();
                viewer.focus();
            }
      }, 500);
    }

    document.addEventListener('click', (e) => {
      if (e.target && e.target.classList &&
            (e.target.classList.contains('imgclose') ||
             e.target.closest('.imgclose'))) {
            const viewer = document.getElementById('imgzoom');
            if (viewer && viewer.dataset.keyboardListenerAdded) {
                viewer.removeEventListener('keydown', handleViewerKeyDown, true);
                delete viewer.dataset.keyboardListenerAdded;
            }
      }
    }, true);
})();

凯诺斯 发表于 2026-1-1 20:40:22

快捷切换图片还是挺实用的惹,浏览变得更方便了{:6_169:}

娱乐法师火布偶 发表于 2026-1-1 20:47:50

喜欢查看小图的坛友应该更能用到这个脚本了

点击输入文字 发表于 2026-1-1 20:48:09

https://img.gamemale.com/album/202512/21/025159lywkirfumgftwuww.jpeg打上这个泥潭的看图时无法切图的缺点就解决了惹,正在利用脚本飞速进化{:6_200:}

2297988 发表于 2026-1-1 21:10:52

好耶,方便的脚本又加了一个=3=~
这下可以更开心地逛泥潭了

Styphon 发表于 2026-1-1 21:21:45

这个看图真的好方便的说,不用一张张点了:$

crabee 发表于 2026-1-1 22:16:21

能用键盘控制很方便了,工作一整天用鼠标已经很累了

轮回2L 发表于 2026-1-1 22:44:28

也是能节省很多时间惹,不用再再次点击图片了{:6_200:}

zeldafire 发表于 2026-1-1 22:50:15

擦,之前都没注意过原来discuz的图片浏览不带左右箭头的啊:L

柏芸 发表于 2026-1-1 23:35:15

很棒的脚本诶,小图点开看总觉得有点麻烦,这样一看就方便多了:$

zhuovboyan 发表于 2026-1-1 23:40:02

0-0 快捷切换图片嘛~感觉这样对咸鱼方便好多呀~

毛茸茸兽兽 发表于 2026-1-1 23:41:26

挺方便的欸~省去退出再点击下一张的步骤了

威风妖怪麒麟 发表于 2026-1-2 01:10:17

帖子里面的图片太多的时候很需要了

熊赳赳 发表于 2026-1-2 02:13:54

这个脚本太方便了!键盘党狂喜!真的不喜欢一直搓触摸板惹 (╯▽╰ )

呆到自然蠢 发表于 2026-1-2 03:11:26

这个真的很实用诶 不用来回点开图片了

2302594 发表于 2026-1-2 06:23:56

图片太多的时候确实很需要这种脚本

you9632587 发表于 2026-1-2 08:20:58

这种脚本对于看图多的帖子真是方便很多了啊

wzsglr 发表于 2026-1-2 09:49:53

这个脚本很实用,看图更方便了,感谢楼主

黑夜下的灯光 发表于 2026-1-2 10:53:08

相当实用的脚本呢,无论是操作还是观赏性都得到了极大的提升呢

1458209048 发表于 2026-1-2 10:54:04

这下切换图片变得方便多了,感谢楼主的制作与分享
页: [1] 2
查看完整版本: 【善者神佑】【脚本】快捷切换图片