您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
manga reader for copymanga, J/K for DOWN/UP, LEFT/RIGHT for previous/next chapter.
当前为
// ==UserScript== // @name Copymanga Simple Read // @namespace http://tampermonkey.net/ // @match https://www.copymanga.com/comic/*/chapter/* // @grant none // @version 1.10 // @author chemPolonium // @description manga reader for copymanga, J/K for DOWN/UP, LEFT/RIGHT for previous/next chapter. // @run-at document-end // ==/UserScript== /* jshint esversion: 6 */ (function() { 'use strict'; document.getElementsByClassName('header')[0].remove(); let comicContainerFluid = document.getElementsByClassName('container-fluid comicContent')[0]; comicContainerFluid.setAttribute('style', 'padding-right: 0px !important; padding-left: 0px !important;'); let comicContainer = comicContainerFluid.children[0]; comicContainer.setAttribute('style', 'max-width: 100% !important; margin-right: 0px !important; margin-left: 0px !important'); let comicList = comicContainer.children[0]; comicList.setAttribute('style', 'padding-top: 0px !important; margin-bottom: 0px !important; max-width: 100% !important; width: 100% !important; display:grid;grid-template-columns: repeat(2, 1fr);direction: rtl;'); let comicListChildren = comicList.children; let currentPageInd = -1; let currentImage; function updateCurrentImage() { currentImage = comicList.children[currentPageInd].children[0]; } function moveToCurrentImage() { window.scrollTo(0, currentImage.offsetTop); } function movePage(x) { currentPageInd += x; currentPageInd = currentPageInd < comicList.children.length ? currentPageInd : comicList.children.length - 1; currentPageInd = currentPageInd >= 0 ? currentPageInd : 1; updateCurrentImage(); } let evt = new UIEvent('scroll'); function setSingleAlign(pageInd) { if (pageInd % 2 == 0) { comicListChildren[pageInd].setAttribute('style', 'text-align: left;'); } else { comicListChildren[pageInd].setAttribute('style', 'text-align: right;'); } } function setAlign() { for (let pageInd = 0; pageInd < comicListChildren.length; pageInd++) { setSingleAlign(pageInd); } } function onePageDown() { // simulate the scroll for preload // the script is like this: total client height / 3 < window scrollY then not load // so first scroll Y to 0 window.scrollTo(0, 0); for (let i = 0; i < 2; i++) { window.dispatchEvent(evt); // dispatch the scroll event for preload movePage(1); // the set will not work if important is not added // currentImage.setAttribute('style', 'width:auto !important; height:auto !important;max-height: 100vh !important; max-width: 50vw !important;'); } moveToCurrentImage(); } function onePageUp() { movePage(-2); moveToCurrentImage(); } let parityChanged = false; function createTitlePage() { let titlePage = document.createElement('li'); let titlePageDiv = document.createElement('div'); let titlePageTitle = document.createElement('p'); titlePageTitle.appendChild(document.createTextNode(document.title)); titlePageTitle.setAttribute('style', 'color: white; font-size: xx-large; max-width: 30vw; margin-top: 30%; margin-right: 20%; white-space: normal;'); titlePageDiv.appendChild(titlePageTitle); titlePage.appendChild(titlePageDiv); return titlePage; } let titlePage = createTitlePage(); function switchParity() { if (parityChanged) { comicList.children[0].remove(); } else { // comicList.insertAdjacentHTML('afterbegin',titlePageHTML); comicList.insertAdjacentElement('afterbegin', titlePage); } parityChanged = !parityChanged; setAlign(); updateCurrentImage(); moveToCurrentImage(); } let footer = document.getElementsByClassName('footer')[0]; let footerChildren = footer.children; let prevChapterHref = footerChildren[1].children[0].href; let nextChapterHref = footerChildren[3].children[0].href; let chapterListHref = footerChildren[4].children[0].href; document.addEventListener('keydown', (event) => { switch (event.code) { case 'ArrowRight': window.location = nextChapterHref; break; case 'ArrowLeft': window.location = prevChapterHref; break; case 'KeyK': onePageUp(); break; case 'KeyJ': onePageDown(); break; case 'KeyL': window.location = chapterListHref; break; case 'Semicolon': switchParity(); break; default: console.log('key: ' + event.key + ' code: ' + event.code); } }); footer.remove(); let firstLoad = true; comicList.addEventListener('DOMNodeInserted', (event) => { if (firstLoad && comicList.children.length > 2) { firstLoad = false; onePageDown(); switchParity(); } setSingleAlign(comicList.children.length - 1); event.target.children[0].setAttribute('style', 'width:auto !important; height:auto !important;max-height: 100vh !important; max-width: 100% !important;'); }); })();