您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Let's Become a Novelist read with a vertical writing mode
// ==UserScript== // @name 小説家になろうを縦書きで表示 // @license MIT // @namespace https://greasyfork.org/zh-TW/scripts/447050-let-s-become-a-novelist-read-with-a-vertical-writing-mode // @version 2.1 // @description Let's Become a Novelist read with a vertical writing mode // @author avan // @match ncode.syosetu.com/* // @grant none // ==/UserScript== const reHeadNav = () => { const headNav = document.querySelector(".c-menu__body") //#head_nav const novlBns = document.querySelectorAll(".c-pager") //.novel_bn const links = novlBns[0].querySelectorAll("a") links.forEach(element => { element.className="c-menu__item c-menu__item--headnav" headNav.appendChild(element) }); headNav.style.width="60rem" } const replaceContents = () => { const contents = document.querySelector("div.p-novel__body") //div#novel_color contents.innerHTML = contents.innerHTML.replace(/\…/g,"..").replace(/\※/g,"*").replace(/\―/g,"。") document.querySelectorAll("div.p-novel__body p").forEach(item => { if (item.innerHTML.length == 0) return if (item.querySelectorAll("a[href],img[src]").length > 0) return item.innerHTML = item.innerHTML.replace(/0/g,"0").replace(/1/g,"1").replace(/2/g,"2").replace(/3/g,"3").replace(/4/g,"4").replace(/5/g,"5").replace(/6/g,"6").replace(/7/g,"7").replace(/8/g,"8").replace(/9/g,"9") item.innerHTML = item.innerHTML.replace(/,/g,",") }) } const vertical = () => { const windowWidth = window.innerWidth*0.9 const windowHeight = window.innerHeight*0.8 const container = document.querySelector(".l-main") container.style.width = "100%" const novelHonbun = document.querySelector(".p-novel__body") const styles = { 'width': windowWidth+"px", 'height': windowHeight+"px", '-ms-writing-mode': 'tb-rl', 'writing-mode': 'vertical-rl', 'overflow-x': 'scroll', 'padding': '10px', 'margin':'0 auto', 'left':'0', 'right':'0', }; Object.assign(novelHonbun.style,styles) window.addEventListener('keydown', function(e){ if(e.keyCode === 33 || e.keyCode === 38){ //page up、up e.preventDefault() scrollLeft(novelHonbun, "up") } else if(e.keyCode === 32 || e.keyCode === 34 || e.keyCode === 40){ //space、page down、down e.preventDefault() scrollLeft(novelHonbun, "down") } else if(e.keyCode === 37){ //left e.preventDefault(); scrollLeft(novelHonbun, "down", 100) } else if(e.keyCode === 39){ //right e.preventDefault() scrollLeft(novelHonbun, "up", 100) } }); novelHonbun.addEventListener('mousewheel', function(e){ e.preventDefault() if(e.wheelDelta > 0) scrollLeft(novelHonbun, "up") else scrollLeft(novelHonbun, "down") }); novelHonbun.addEventListener('click', function(e) { var xPosition = e.layerX var yPosition = e.layerY if (xPosition > windowWidth) { scrollLeft(novelHonbun, "up") } else if (xPosition < windowWidth*0.1) { scrollLeft(novelHonbun, "down") } console.log("x:" + xPosition + ", y:" + yPosition) }); } const scrollLeft = (element, type, value) => { if (!value || value <= 0) value = element.clientWidth*0.9 if (!type) type = "down" if (type === "up") element.scrollLeft += value //up else if (type === "down") element.scrollLeft -= value //down } (function() { reHeadNav() replaceContents() vertical() })()