// ==UserScript== // @name 微信读书自动翻页 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 微信读书网页版自动翻页 // @author bulan_zade // @match https://weread.qq.com/web/reader/* // @require https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant none // @license MIT // @downloadURL none // ==/UserScript== // 模拟键盘事件 function fireKeyEvent(el, evtType, keyCode) { let evtObj; if (document.createEvent) { if (window.KeyEvent) {//firefox 浏览器下模拟事件 evtObj = document.createEvent('KeyEvents'); evtObj.initKeyEvent(evtType, true, true, window, true, false, false, false, keyCode, 0); } else {//chrome 浏览器下模拟事件 evtObj = document.createEvent('UIEvents'); evtObj.initUIEvent(evtType, true, true, window, 1); delete evtObj.keyCode; if (typeof evtObj.keyCode === "undefined") {//为了模拟keycode Object.defineProperty(evtObj, "keyCode", { value: keyCode }); } else { evtObj.key = String.fromCharCode(keyCode); } if (typeof evtObj.ctrlKey === 'undefined') {//为了模拟ctrl键 Object.defineProperty(evtObj, "ctrlKey", { value: true }); } else { evtObj.ctrlKey = true; } } el.dispatchEvent(evtObj); } else if (document.createEventObject) {//IE 浏览器下模拟事件 evtObj = document.createEventObject(); evtObj.keyCode = keyCode el.fireEvent('on' + evtType, evtObj); } } window.onload = function() { let container = document.getElementsByClassName("readerControls")[0] let html = '
\n' + ' \n' + '

0

\n' + '
\n' + ` \n`+ '
\n' + '

20

\n' + '
' container.insertAdjacentHTML('beforeend',html) let control = document.getElementById("autoScrollControl") let btn = document.getElementById("autoScrollBtn") let scrollSpeed = document.getElementById("scrollSpeed"); let timer let controlDisplaying = false; let onBtnClick = false scrollSpeed.onchange = function () { if (scrollSpeed.value != 0) { clearInterval(timer) timer = setInterval(() => { if (document.documentElement.scrollHeight - document.documentElement.scrollTop === document.documentElement.clientHeight) { fireKeyEvent(document, "keydown", 39) //clearInterval(timer) } else { window.scrollBy(0, scrollSpeed.value) } }, 100) btn.innerText = "滚动中" } else { clearInterval(timer) btn.innerText = "滚动" } } // 显示滚动控制条 btn.onclick = function() { onBtnClick = true btn.setAttribute("style", "display:none") control.className += " expand" controlDisplaying = true } // 点击空白区域时隐藏滚动控制条 document.body.onclick = function() { if (controlDisplaying && !onBtnClick) { btn.removeAttribute("style") control.className = control.className.replace(" expand", "") } onBtnClick = false } }