Instagram: Arrow Keys for Multi-Image Posts

Makes right/left keys navigate next/previous images in multi-image posts, as well as to adjacent posts. Holding shift, right/left jumps directly between posts. Esc key closes posts.

目前為 2024-02-03 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Instagram: Arrow Keys for Multi-Image Posts
// @description  Makes right/left keys navigate next/previous images in multi-image posts, as well as to adjacent posts. Holding shift, right/left jumps directly between posts. Esc key closes posts.
// @match        https://www.instagram.com/*
// @version      0.5
// @author       mica
// @namespace    greasyfork.org/users/12559
// @license      MIT
// ==/UserScript==


const nextImg = () => document.querySelector('article button[aria-label="Next"]');
const prevImg = () => document.querySelector('article button[aria-label="Go back"]');
const nextPgImg = () => document.querySelector('button[aria-label="Next"]');
const prevPgImg = () => document.querySelector('button[aria-label="Go back"]');
const nextPost = () => document.querySelector('svg[aria-label="Next"]');
const prevPost = () => document.querySelector('svg[aria-label="Go back"]');
const closePost = () => document.querySelector('svg[aria-label="Close"]');

document.addEventListener('keydown', (event) => {
    event.stopPropagation();
    switch (true) {
        case (event.shiftKey && event.key == 'ArrowRight'):
            nextPost().parentElement.click();
            break;
        case (event.key == 'ArrowRight'):
            if (nextImg()) {
                nextImg().click();
            } else if (nextPost()) {
                nextPost().parentElement.click();
            } else {
                nextPgImg().click();
            }
            break;
        case (event.shiftKey && event.key == 'ArrowLeft'):
            prevPost().parentElement.click();
            break;
        case (event.key == 'ArrowLeft'):
            if (prevImg()) {
                prevImg().click();
            } else if (prevPost()) {
                prevPost().parentElement.click();
            } else {
                prevPgImg().click();
            }
            break;
        case (event.key == 'Escape'):
            closePost().parentElement.click();
            break;
    }
}, true);