GameMale
登陆 / 注册 搜索

USERCENTER

SEARCHSITE

搜索

查看: 2327|回复: 32
收起左侧

[实用工具] 【善者神佑】【脚本】快捷切换图片

[复制链接] |关注本帖

GM活动员

法师 · I

果体76裸体克里斯炙热的格拉迪欧拉斯凯登‧阿兰科永远的克叔【夏日限定】夏日的泰凯斯众志成城光之少女の魔法书亭亭如盖

     楼主| Makima 发表于 2026-1-1 20:19:04 | 显示全部楼层 |阅读模式 <

    点开图片时,按ad或者←→快捷切换图片




    @Name @Match


    1. // ==UserScript==
    2. // @name         GM查看图片
    3. // @version      0.1
    4. // @author       MKM
    5. // @match        https://www.gamemale.com/*
    6. // ==/UserScript==


    7. (function() {
    8.     'use strict';

    9.     const config = {
    10.         hotkey: {
    11.             prev: 'ArrowLeft',
    12.             next: 'ArrowRight',
    13.             close: 'Escape',
    14.             prevAlt: 'a',
    15.             nextAlt: 'd'
    16.         }
    17.     };

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

    24.     function clickPrev() {
    25.         const prevBtn = document.getElementById('zimg_prev');
    26.         if (prevBtn && isImageViewerActive()) {
    27.             prevBtn.click();
    28.         }
    29.     }

    30.     function clickNext() {
    31.         const nextBtn = document.getElementById('zimg_next');
    32.         if (nextBtn && isImageViewerActive()) {
    33.             nextBtn.click();
    34.         }
    35.     }

    36.     function closeViewer() {
    37.         const closeBtn = document.querySelector('#imgzoom .imgclose');
    38.         if (closeBtn && isImageViewerActive()) {
    39.             closeBtn.click();
    40.         }
    41.     }

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

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

    49.     function handleViewerKeyDown(e) {
    50.         if (!isImageViewerActive()) return;

    51.         let handled = false;

    52.         switch(e.key) {
    53.             case config.hotkey.prev:
    54.             case config.hotkey.prevAlt:
    55.                 e.preventDefault();
    56.                 e.stopPropagation();
    57.                 e.stopImmediatePropagation();
    58.                 clickPrev();
    59.                 handled = true;
    60.                 break;

    61.             case config.hotkey.next:
    62.             case config.hotkey.nextAlt:
    63.                 e.preventDefault();
    64.                 e.stopPropagation();
    65.                 e.stopImmediatePropagation();
    66.                 clickNext();
    67.                 handled = true;
    68.                 break;

    69.             case config.hotkey.close:
    70.                 e.preventDefault();
    71.                 e.stopPropagation();
    72.                 e.stopImmediatePropagation();
    73.                 closeViewer();
    74.                 handled = true;
    75.                 break;
    76.         }

    77.         if (handled) {
    78.             e.preventDefault();
    79.             e.stopPropagation();
    80.             e.stopImmediatePropagation();
    81.             return false;
    82.         }
    83.     }

    84.     function handleGlobalKeyDown(e) {
    85.         if (!isImageViewerActive()) return;

    86.         const hotkeys = [
    87.             config.hotkey.prev,
    88.             config.hotkey.next,
    89.             config.hotkey.close,
    90.             config.hotkey.prevAlt,
    91.             config.hotkey.nextAlt
    92.         ];

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

    95.             switch(e.key) {
    96.                 case config.hotkey.prev:
    97.                 case config.hotkey.prevAlt:
    98.                     clickPrev();
    99.                     break;
    100.                 case config.hotkey.next:
    101.                 case config.hotkey.nextAlt:
    102.                     clickNext();
    103.                     break;
    104.                 case config.hotkey.close:
    105.                     closeViewer();
    106.                     break;
    107.             }

    108.             return false;
    109.         }
    110.     }

    111.     const observer = new MutationObserver((mutations) => {
    112.         mutations.forEach((mutation) => {
    113.             if (mutation.addedNodes.length) {
    114.                 mutation.addedNodes.forEach((node) => {
    115.                     if (node.id === 'imgzoom' || (node.querySelector && node.querySelector('#imgzoom'))) {
    116.                         setTimeout(() => {
    117.                             const viewer = document.getElementById('imgzoom');
    118.                             if (viewer) {
    119.                                 addViewerKeyboardListener();
    120.                                 viewer.focus();
    121.                             }
    122.                         }, 150);
    123.                     }
    124.                 });
    125.             }

    126.             if (mutation.type === 'attributes') {
    127.                 const target = mutation.target;
    128.                 if (target.id === 'imgzoom' && mutation.attributeName === 'style') {
    129.                     const viewer = document.getElementById('imgzoom');
    130.                     if (viewer && viewer.style.display !== 'none') {
    131.                         setTimeout(() => {
    132.                             addViewerKeyboardListener();
    133.                             viewer.focus();
    134.                         }, 150);
    135.                     }
    136.                 }
    137.             }
    138.         });
    139.     });

    140.     observer.observe(document.body, {
    141.         childList: true,
    142.         subtree: true,
    143.         attributes: true,
    144.         attributeFilter: ['style', 'class']
    145.     });

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

    147.     if (isImageViewerActive()) {
    148.         setTimeout(() => {
    149.             const viewer = document.getElementById('imgzoom');
    150.             if (viewer) {
    151.                 addViewerKeyboardListener();
    152.                 viewer.focus();
    153.             }
    154.         }, 500);
    155.     }

    156.     document.addEventListener('click', (e) => {
    157.         if (e.target && e.target.classList &&
    158.             (e.target.classList.contains('imgclose') ||
    159.              e.target.closest('.imgclose'))) {
    160.             const viewer = document.getElementById('imgzoom');
    161.             if (viewer && viewer.dataset.keyboardListenerAdded) {
    162.                 viewer.removeEventListener('keydown', handleViewerKeyDown, true);
    163.                 delete viewer.dataset.keyboardListenerAdded;
    164.             }
    165.         }
    166.     }, true);
    167. })();
    复制代码


    评分

    参与人数 3追随 +3 堕落 +1 收起 理由
    Qxia1010 + 1
    书の妖怪 + 1 来支持惹
    you9632587 + 1 + 1

    查看全部评分

    本帖被以下淘专辑推荐:

    回复

    使用道具 举报

    Lvl. 10 · I

    GM活动员

    游侠 · I

      凯诺斯 发表于 2026-1-1 20:40:22 | 显示全部楼层 <
      回复

      使用道具 举报

      GM活动员

      法师 · I

      炉石与家法师I· 学识之章盈满心相元石『召唤好运的角笛』鎏彩万幢男巫之歌女巫之路虚空之海的鲸業火死鬥实现梦想

        娱乐法师火布偶 发表于 2026-1-1 20:47:50 | 显示全部楼层 <
        回复

        使用道具 举报

        收到情书夜魔护符石肤术召唤古代战士炼金之心『伊黎丝的赞美词』阿帕茶『开心果奶酥』

          点击输入文字 发表于 2026-1-1 20:48:09 | 显示全部楼层 <
          回复

          使用道具 举报

          永远的克叔灵魂之椅游侠I · 资深游侠新神的赐福官复原职实现梦想传奇業火死鬥虚空之海的鲸不朽之恋

            2297988 发表于 2026-1-1 21:10:52 | 显示全部楼层 <
            回复

            使用道具 举报

            桂花米糕发条八音盒弗雷迪玩偶河豚寿司荧光水母Amicus

              Styphon 发表于 2026-1-1 21:21:45 | 显示全部楼层 <
              回复

              使用道具 举报

              抉择SCP-s-1889-第七页You Can Pet Blaidd达拉然Dante鸿蒙方舟葡萄精酿威猛尼特

                crabee 发表于 2026-1-1 22:16:21 | 显示全部楼层 <
                回复

                使用道具 举报

                自定义男从Homunculus诺克提斯·路西斯·伽拉姆钢铁侠凯登‧阿兰科永远的克叔【夏日限定】夏日的泰凯斯裸体克里斯极·龙の意苏格兰圆脸胖鸡[Pro Max]虚空之海的鲸

                  轮回2L 发表于 2026-1-1 22:44:28 | 显示全部楼层 <
                  回复

                  使用道具 举报

                    zeldafire 发表于 2026-1-1 22:50:15 | 显示全部楼层 <
                    回复

                    使用道具 举报

                    法师I· 资深法师竹取物语永冻土北极星棱霜靴霉运小精灵[红]『住在GM村』缘起星空

                      柏芸 发表于 2026-1-1 23:35:15 | 显示全部楼层 <
                      回复

                      使用道具 举报

                      玄甲金盾揄人者冠冕灵魂之椅涅槃龙衔金戒『草莓乳酪』『住在GM村』辉光心相元石童年的蛋河豚寿司

                        zhuovboyan 发表于 2026-1-1 23:40:02 | 显示全部楼层 <
                        回复

                        使用道具 举报

                        霉运小精灵[红]我的天使GM吸血伯爵吃饱金币的Doge苏格兰圆脸胖鸡小小舞台守卫: 坚守眼位永浴爱河肉垫手套御医神兔

                          毛茸茸兽兽 发表于 2026-1-1 23:41:26 | 显示全部楼层 <
                          回复

                          使用道具 举报

                          鎏彩万幢Zootopia都市:天际线2叶卡捷琳娜大帝传奇实现梦想官复原职丹雀衔五穗,人间始丰登丹妮莉丝·坦格利安刀锋女王 - 归宿

                            威风妖怪麒麟 发表于 2026-1-2 01:10:17 | 显示全部楼层 <
                            回复

                            使用道具 举报

                            启程骑兽之子希尔瓦娜斯·风行者奥兹大陆刀锋女王 - 归宿保加利亚妖王岛田源氏甘道夫·涅槃重生恩惠护符史莱姆牧场

                              熊赳赳 发表于 2026-1-2 02:13:54 | 显示全部楼层 <
                              回复

                              使用道具 举报

                              You Can Pet Blaidd泰比里厄斯Amicus可鲁贝洛斯克莱夫・罗兹菲尔德BIG BOSS亚瑟‧摩根性感男神GM

                                呆到自然蠢 发表于 2026-1-2 03:11:26 | 显示全部楼层 <
                                回复

                                使用道具 举报

                                石肤术雷霆晶球『领甜甜圈』敖蜃星炼金之心召唤古代战士艾吉奥岛田半藏诺克提斯·路西斯·伽拉姆萨菲罗斯

                                  2302594 发表于 2026-1-2 06:23:56 | 显示全部楼层 <
                                  回复

                                  使用道具 举报

                                  缘起星空女巫之路炽天使之拥法师I· 学识之章闪耀的赫尔墨斯之杖卡利亚权杖

                                    you9632587 发表于 2026-1-2 08:20:58 | 显示全部楼层 <
                                    回复

                                    使用道具 举报

                                    念念往日士官盔【新手友好】昆進

                                      wzsglr 发表于 2026-1-2 09:49:53 | 显示全部楼层 <
                                      回复

                                      使用道具 举报

                                      霉运小精灵[红]灵光补脑剂我的天使终归一人至尊巴哈姆特You Can Pet Blaidd炽焰咆哮虎官复原职实现梦想卡利亚权杖

                                        黑夜下的灯光 发表于 2026-1-2 10:53:08 | 显示全部楼层 <
                                        回复

                                        使用道具 举报

                                        瑞雪兆丰年,生灵万物新野兽之子神秘商店贵宾卡变骚喷雾飘飘终章敖蜃星黑暗交易炼金之心都市:天际线2

                                          1458209048 发表于 2026-1-2 10:54:04 | 显示全部楼层 <
                                          回复

                                          使用道具 举报

                                          您需要登录后才可以回帖 登录 | 立即注册

                                          本版积分规则

                                          关闭

                                          站长公告上一条 /1 下一条

                                          文字版|手机版|小黑屋|GameMale

                                          GMT+8, 2026-6-13 23:48 , Processed in 0.150452 second(s), 148 queries , Redis On.

                                          Copyright © 2013-2026 GameMale

                                          All Rights Reserved.

                                          快速回复 返回列表