您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
For Mangakakalot & Manganelo
当前为
// ==UserScript== // @name Chapter Changer + Smooth Scrolling // @description For Mangakakalot & Manganelo // @version 0.71 // @namespace http://greasyfork.icu/en/users/55535-sllypper // @author sllypper // @match https://mangakakalot.com/chapter/* // @match https://manganelo.com/chapter/* // @grant none // ==/UserScript== (function() { 'use strict'; let scrollAmount = 64; let scrollPeriod = 32; let shiftSpeedMod = 2; const states = { NONE: 0, UP: 1, SHIFTUP: 2, DOWN: 3, SHIFTDOWN: 4 } let scrollState = states.NONE; let currScrollAction = null; let buttons = document.getElementsByClassName('navi-change-chapter-btn'); if (buttons.length === 0) { buttons = document.getElementsByClassName('btn-navigation-chap'); if (buttons.length === 0) return; } buttons = buttons[0].childNodes; let prevButton = buttons[0]; let nextButton = buttons[buttons.length-1]; // if there's only one button if (buttons.length != 2) { // check if it's the next button // mangakakalot has "back" and "next" button classes are switched around if (buttons[0].classList.contains("back") || buttons[0].classList.contains("navi-change-chapter-btn-next")) { // then we're in chapter 1 and there's no prev button prevButton = null; } else { // else we're in the last chapter and there's no next button nextButton = null; } } document.addEventListener("keydown", event => { if (event.code === "KeyW" || event.code === "KeyK") { if (scrollState !== states.UP && !event.shiftKey) { clearScrollAction(); scrollState = states.UP; scrollAction(-scrollAmount); } else if (scrollState !== states.SHIFTUP && event.shiftKey) { clearScrollAction(); scrollState = states.SHIFTUP; scrollAction(-scrollAmount*shiftSpeedMod); } } else if (event.code === "KeyS" || event.code === "KeyJ") { if (scrollState !== states.DOWN && !event.shiftKey) { clearScrollAction(); scrollState = states.DOWN; scrollAction(scrollAmount); } else if (scrollState !== states.SHIFTDOWN && event.shiftKey) { clearScrollAction(); scrollState = states.SHIFTDOWN; scrollAction(scrollAmount*shiftSpeedMod); } } else if (event.code === "KeyC" && nextButton != null) { nextButton.click(); } else if (event.code === "KeyZ" && prevButton != null) { prevButton.click(); } }); document.addEventListener("keyup", event => { if (event.code === "KeyW" || event.code === "KeyK") { clearScrollAction(); } else if (event.code === "KeyS" || event.code === "KeyJ") { clearScrollAction(); } else if (event.key === "Shift") { clearScrollAction(); } }); function scrollAction(amount) { currScrollAction = setInterval(() => { window.scrollBy(0, amount); }, scrollPeriod) } function clearScrollAction() { clearInterval(currScrollAction); currScrollAction = null; scrollState = states.NONE; } })();