F95Zone Gallery - Mouse Wheel Navigation

Navigate Gallery images with the mouse wheel

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         F95Zone Gallery - Mouse Wheel Navigation
// @namespace    https://gameil.com/
// @version      2026-09-09
// @description  Navigate Gallery images with the mouse wheel
// @author       Gameil
// @match        https://f95zone.to/threads/*/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=f95zone.to
// @grant        none
// @run-at       document-idle
// @license      MIT
// ==/UserScript==

(function () {
  "use strict";
  let lastWheelTime = 0;
  const WHEEL_DELAY = 200;

  document.addEventListener(
    "wheel",
    function (event) {
      // Only respond when lightGallery is actually open
      const gallery = document.querySelector(".lg");

      if (!gallery) {
        return;
      }

      const now = Date.now();
      if (now - lastWheelTime < WHEEL_DELAY) {
        event.preventDefault();
        return;
      }

      lastWheelTime = now;
      const direction = Math.sign(event.deltaY);

      if (direction === 0) {
        return;
      }

      const button =
        direction > 0
          ? gallery.querySelector(".lg-next")
          : gallery.querySelector(".lg-prev");

      if (!button) {
        return;
      }

      event.preventDefault();
      event.stopPropagation();

      button.click();
    },
    {
      passive: false,
      capture: true,
    },
  );
})();