您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
You can quickly access the previous and next episodes, perform smooth scrolling up or down, and even enable or disable full-screen mode. This script is designed to enhance the reading experience of web content such as manga and comics in a more convenient and efficient way.
当前为
// ==UserScript== // @name SmoothScroll & Navigation Enhancer // @namespace http://tampermonkey.net/ // @version 1.4 // @description You can quickly access the previous and next episodes, perform smooth scrolling up or down, and even enable or disable full-screen mode. This script is designed to enhance the reading experience of web content such as manga and comics in a more convenient and efficient way. // @match https://westmanga.fun/* // @match https://komikcast.bz/* // @match https://aquamanga.org/read/* // @match https://www.webtoons.com/* // @match https://kiryuu.one/* // @match https://mangaku.lat/* // @match https://manhwatop.com/* // @match https://komiku.id/* // @match https://komiknesia.xyz/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; var scrollInterval = null; var isScrolling = false var isFullscreen = false; var activeElement; var smoothScrollSpeed = 10.5; // Kecepatan pengguliran yang mulus var smoothScrollDelay = 10; // Penundaan di antara setiap langkah pengguliran yang mulus const HOSTS = { 'westmanga.fun': { next: '.ch-next-btn', prev: '.ch-prev-btn' }, 'komikcast.bz': { next: '.nextprev a[rel="next"]', prev: '.nextprev a[rel="prev"]' }, 'www.webtoons.com': { next: 'a[title="Episode selanjutnya"]', prev: 'a[title="Episode sebelumnya"]' }, 'aquamanga.org': { next: 'a.btn.next_page', prev: 'a.btn.prev_page' }, 'kiryuu.one': { next: 'a.ch-next-btn', prev: 'a.ch-prev-btn' }, 'mangatale.co': { next: 'a.ch-next-btn', prev: 'a.ch-prev-btn' }, 'mangaku.lat': { prev: 'button.glho.glkp_1:-soup-contains("PREV")', next: 'button.glho.glkn_1:-soup-contains("NEXT")' }, 'manhwatop.com': { prev: '.prev_page', next: '.next_page' }, 'komiku.id': { prev: 'div.nxpr > a.rl:first-of-type', next: 'div.nxpr > a.rl:last-of-type' }, 'komiknesia.xyz': { prev: 'a.ch-prev-btn', next: 'a.ch-next-btn' }, 'mangadex.org': { prev: '', next: '' } }; let btnNext, btnPrev; let host = window.location.host; if (HOSTS[host]) { btnNext = HOSTS[host].next; btnPrev = HOSTS[host].prev; } const zoomLevel = () => { return document.body.style.zoom || 1; } function adjustSmoothScroll() { let zLevel = zoomLevel(); smoothScrollSpeed = smoothScrollSpeed * zLevel; smoothScrollDelay = smoothScrollDelay / zLevel; } function smoothScrollStep(direction) { var scrollDistance = direction === 'up' ? -smoothScrollSpeed : smoothScrollSpeed; window.scrollBy(0, scrollDistance); } function startSmoothScrolling(direction) { if (!isScrolling) { isScrolling = true; smoothScrollStep(direction); scrollInterval = setInterval(function() { smoothScrollStep(direction); }, smoothScrollDelay); } } function stopSmoothScrolling() { if (isScrolling) { isScrolling = false; clearInterval(scrollInterval); } } // Deteksi saat zoom berubah document.addEventListener('zoomchange', adjustSmoothScroll); // Sesuaikan juga saat scroll dihentikan document.addEventListener('keyup', event => { if (isScrolling) { stopSmoothScrolling(); adjustSmoothScroll(); } }); adjustSmoothScroll(); document.addEventListener('keydown', function(event) { if ((event.key === 'a' || event.key === 'A' || event.key === 'ArrowLeft') && !event.ctrlKey && !event.altKey && event.key !== 'Tab') { let prevButton = document.querySelector(btnPrev); if (prevButton) { // Periksa elemen yang sedang dalam fokus activeElement = document.activeElement; if (!(activeElement && (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA'))) { // Pengguna tidak sedang mengetik prevButton.click(); } } } else if ((event.key === 'd' || event.key === 'D' || event.key === 'ArrowRight') && !event.ctrlKey && !event.altKey && event.key !== 'Tab') { let nextButton = document.querySelector(btnNext); if (nextButton) { // Periksa elemen yang sedang dalam fokus activeElement = document.activeElement; if (!(activeElement && (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA'))) { // Pengguna tidak sedang mengetik nextButton.click(); } } } else if ((event.key === 's' || event.key === 'S') && !event.ctrlKey && !event.altKey && event.key !== 'Tab') { // Periksa elemen yang sedang dalam fokus activeElement = document.activeElement; if (!(activeElement && (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA'))) { // Pengguna tidak sedang mengetik startSmoothScrolling('down'); } } else if ((event.key === 'w' || event.key === 'W') && !event.ctrlKey && !event.altKey && event.key !== 'Tab') { // Periksa elemen yang sedang dalam fokus activeElement = document.activeElement; if (!(activeElement && (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA'))) { // Pengguna tidak sedang mengetik startSmoothScrolling('up'); } } else if ((event.key === 'f' || event.key === 'F') && !event.ctrlKey && !event.altKey && event.key !== 'Tab') { // Periksa elemen yang sedang dalam fokus activeElement = document.activeElement; if (!(activeElement && (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA'))) { // Pengguna tidak sedang mengetik, masuk ke mode fullscreen event.preventDefault(); toggleFullscreen(); // Fungsi Anda untuk masuk/keluar dari mode fullscreen } } else if ((event.key === 'q' || event.key === 'Q') && !event.ctrlKey && !event.altKey && event.key !== 'Tab') { var allChapterButton; if (window.location.host === 'westmanga.fun') { allChapterButton = document.querySelector('.allc a'); } else if (window.location.host === 'www.webtoons.com') { allChapterButton = document.querySelector('a[class="subj NPI=a:end,g:in_id"]'); } else if (window.location.host === 'komiknesia.xyz') { allChapterButton = document.querySelector('.allc a'); } else if (window.location.host === 'kiryuu.one') { allChapterButton = document.evaluate("//div[contains(text(), 'Semua chapter ada di')]/a", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; } else if (window.location.host === 'komikcast.bz') { allChapterButton = document.querySelector('div.allc a'); } else if (window.location.host === 'mangatale.co') { allChapterButton = document.evaluate("//div[contains(text(), 'All chapters are in ')]/a", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; } else if (window.location.host === 'aquamanga.org') { // Ambil URL saat ini var currentUrl = window.location.href; // Gunakan ekspresi reguler untuk menghapus segmen URL setelah judul komik var newUrl = currentUrl.replace(/\/read\/([^/]+)\/.*/, '/read/$1/'); // Periksa elemen yang sedang dalam fokus activeElement = document.activeElement; if (!(activeElement && (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA'))) { // Pengguna tidak sedang mengetik memindahkan pengguna ke URL yang telah diubah window.location.href = newUrl; } } if (allChapterButton) { // Periksa elemen yang sedang dalam fokus activeElement = document.activeElement; if (!(activeElement && (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA'))) { // Pengguna tidak sedang mengetik allChapterButton.click(); } } } }); function toggleFullscreen() { if (!isFullscreen) { enterFullscreen(); } else { exitFullscreen(); } isFullscreen = !isFullscreen; } function enterFullscreen() { const elem = document.documentElement; if (elem.requestFullscreen) { elem.requestFullscreen(); } else if (elem.mozRequestFullScreen) { elem.mozRequestFullScreen(); } else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen(); } else if (elem.msRequestFullscreen) { elem.msRequestFullscreen(); } } function exitFullscreen() { if (document.exitFullscreen) { document.exitFullscreen(); } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen(); } else if (document.webkitExitFullscreen) { document.webkitExitFullscreen(); } else if (document.msExitFullscreen) { document.msExitFullscreen(); } } document.addEventListener('keyup', function(event) { if ((event.key === 's' || event.key === 'S' || event.key === 'w' || event.key === 'W') && !event.ctrlKey && !event.altKey && event.key !== 'Tab') { stopSmoothScrolling(); window.scrollTo(window.pageXOffset, window.pageYOffset); // Menghentikan scroll secara instan } }); })();