// ==UserScript==
// @name 微信读书 VIP会员版
// @version 2.2.3
// @license MIT
// @namespace https://greasyfork.org/zh-CN/users/1272865
// @description 可视化面板,轻松修改宽度、字体、字体颜色、背景颜色、背景图片,另有自动滚动(加速/减速/暂停/继续),自动翻页,隐藏头部标题。字体、背景颜色非常方便拓展增加
// @author brewin
// @match https://weread.qq.com/web/reader/*
// @require https://cdn.staticfile.org/jquery/3.3.1/jquery.min.js
// @icon https://weread.qq.com/favicon.ico
// @grant GM_log
// @grant GM_addStyle
// @grant unsafeWindow
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_openInTab
// @grant GM_download
// @grant GM_setClipboard
// @grant GM_notification
// @grant GM_xmlhttpRequest
// @grant GM_registerMenuCommand
// @connect pixabay.com
// @connect w3school.com.cn
// ==/UserScript==
//GM_addStyle("*{font-family: TsangerJinKai05 !important;}");
//GM_addStyle(".renderTargetContainer .wr_canvasContainer{position:inherit}");
GM_addStyle(
".readerControls{margin-left: calc(50% - 200px) !important;margin-bottom: -28px !important;}"
);
GM_addStyle(
".dialog { display: none; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 400px; height: 600px; background-color: #f9f9f9; padding: 2px; border: 1px solid #ffffff; border-radius: 10px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); z-index: 1000; }.dialog-header { cursor: move; user-select: none; padding: 5px; height: 60px; background-color: #007bff; color: #fff; position: relative; border-top-left-radius: 10px; border-top-right-radius: 10px; font-size: 45px; font-weight: bold; }.dialog-content { padding: 10px; height: 500px; color: #000; background-color: #f0f0f0; border-bottom-left-radius: 10px; border-bottom-right-radius: 10px; }.close { font-size: 20px; font-weight: bold; cursor: pointer; color: #fff; position: absolute; top: 5px; right: 5px; }"
);
GM_addStyle(
".next-page-tip { display: none; position: fixed; bottom: 0%; right: 10%; width: 120px; height: 40px; font-size: 25px;color:#000; background-color: #fff; padding: 2px; border: 1px solid grey; border-radius: 10px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); z-index: 1000; }"
);
GM_addStyle(
".next-page-tip-progress { width: 80px; background-color: #d8e2c8; }"
);
GM_addStyle("#dialog_content { overflow-y: auto; }");
GM_addStyle(
".font-show-area-btn {font-size: 25px;color:#A52A2A; border:2px #c4c4c4 solid ;margin:5px}"
);
GM_addStyle(".font-show-area-font-absence {color:grey;}");
GM_addStyle(
".font-color-show-area-btn{font-size: 20px; border:2px #c4c4c4 solid ;margin:5px}"
);
GM_addStyle(".font-color-show-area-label{font-size: 30px;margin:5px}");
GM_addStyle(
".background-color-show-area-btn{font-size: 20px; border:2px #c4c4c4 solid ;margin:5px}"
);
GM_addStyle(
".custom-background-color-show-area-btn{font-size: 12px; border:1px #c4c4c4 solid ;padding:5px}"
);
GM_addStyle(
".width-show-area-btn{font-size: 12px; border:1px #c4c4c4 solid ;margin:5px}"
);
GM_addStyle(".background-color-show-area-label{font-size: 30px;margin:5px}");
GM_addStyle(
".auto-scroll-show-area-btn{ border:1px #c4c4c4 solid ;margin:5px}"
);
$(window).on("load", async function () {
"use strict";
///////////////////////////////////////////////////// 全局变量和菜单指令 /////////////////////////////////////////////////////
//可选字体
var myfonts = [
{
name: "默认",
font: "PingFang SC,-apple-system,SF UI Text,Lucida Grande,STheiti,Microsoft YaHei,sans-serif"
},
{ name: "楷体", font: "楷体" },
{ name: "宋体", font: "宋体" },
{ name: "黑体", font: "黑体" },
{ name: "苍耳今楷", font: "TsangerJinKai05" },
{ name: "字魂白鸽天行体", font: "字魂白鸽天行体" },
{ name: "霞鹜文楷", font: "霞鹜文楷" },
{ name: "汉仪空山楷", font: "汉仪空山楷" },
{ name: "寒蝉正楷体", font: "ChillKai" },
{ name: "三极行楷简体", font: "三极行楷简体-粗" },
{ name: "演示悠然小楷", font: "演示悠然小楷" }
];
//可选背景图片
var background_image_urls = [
"https://www.w3school.com.cn/i/eg_bg_02.gif",
"https://www.w3school.com.cn/i/eg_bg_03.gif",
"https://www.w3school.com.cn/i/eg_bg_04.gif",
"https://cdn.pixabay.com/photo/2016/12/18/02/35/paper-1914901_1280.jpg",
"https://cdn.pixabay.com/photo/2017/09/06/11/41/vintage-2721099_1280.jpg",
"https://cdn.pixabay.com/photo/2016/04/15/21/39/paper-1332019_1280.jpg",
"https://cdn.pixabay.com/photo/2016/12/18/02/41/background-1914910_1280.jpg",
"https://cdn.pixabay.com/photo/2015/06/02/15/31/watercolor-795162_1280.jpg",
"https://cdn.pixabay.com/photo/2017/09/06/11/41/vintage-2721100_1280.jpg",
"https://cdn.pixabay.com/photo/2016/04/15/21/34/paper-1332008_1280.jpg",
"https://cdn.pixabay.com/photo/2016/04/15/21/37/paper-1332013_1280.jpg",
"https://cdn.pixabay.com/photo/2017/11/07/10/22/paper-2926300_1280.jpg",
"https://cdn.pixabay.com/photo/2018/02/16/20/46/pattern-3158572_1280.jpg",
"https://cdn.pixabay.com/photo/2014/11/20/20/30/paper-539779_1280.jpg",
"https://cdn.pixabay.com/photo/2019/11/02/15/21/map-4596619_1280.jpg",
"https://cdn.pixabay.com/photo/2017/02/04/11/33/background-2037176_1280.jpg",
"https://cdn.pixabay.com/photo/2015/09/13/11/00/vintage-937977_1280.jpg",
"https://www.w3school.com.cn/i/eg_bg_01.gif"
];
//自定义常驻背景颜色
var mybackground_colors = [
{ name: "浅绿", color: "#d8e2c8" },
{ name: "茶色", color: "#d2b48c" },
{ name: "淡绿", color: "#eefaee" },
{ name: "明黄", color: "#ffffed" },
{ name: "灰绿", color: "#d8e7eb" },
{ name: "浅蓝", color: "#e9faff" },
{ name: "草绿", color: "#cce8cf" },
{ name: "红粉", color: "#fcefff" },
{ name: "米黄", color: "#f5f5dc" },
{ name: "暗银", color: "#c0c0c0" },
{ name: "黑绿", color: "#00b800" },
{ name: "浅黄", color: "#f5f1e8" },
{ name: "浅灰", color: "#d9e0e8" },
{ name: "深灰", color: "#555555" },
{ name: "漆黑", color: "#111111" },
{ name: "淡青", color: "#839496" },
{ name: "深青", color: "#002b36" }
];
///////////////////////////////////////////////////// 对话框 /////////////////////////////////////////////////////
$("body").append(`
<div id="dialog" class="dialog">
<div class="dialog-header">
<span>功能</span>
<span class="close" id="close_dialog">×</span>
</div>
<div id="dialog_content" class="dialog-content">
<div class="font-style">
<h3>宽度:</h3>
<div id="width_show_area">
</div>
<h3>字体:</h3>
<div id="font_show_area">
</div>
<h3>字体颜色:</h3>
<div id="font_color_show_area">
</div>
<h3>背景颜色:</h3>
<div id="background_color_show_area">
</div>
<h3>背景图片:</h3>
<div id="background_image_show_area">
</div>
<h3>自动滚动:</h3>
<div id="auto_scroll_show_area">
</div>
</div>
</div>
</div>
`);
$("body").append(`
<div id="next_page_tip" class="next-page-tip">
<div class="next-page-tip-progress">
即将翻页
</div>
</div>
`);
var control_function_btn_div =
"<button id='open_dialog' class='readerControls_item' style='color:#6a6c6c;cursor:pointer;'>功能</button>";
$(".readerControls").append(control_function_btn_div);
$("#open_dialog").click(function () {
$("#dialog").fadeIn();
});
$("#close_dialog").click(function () {
$("#dialog").fadeOut();
});
let is_dragging = false;
let offset_x, offset_y;
$(".dialog-header").mousedown(function (e) {
is_dragging = true;
offset_x = e.clientX - $("#dialog").offset().left;
offset_y = e.clientY - $("#dialog").offset().top;
});
$(document).mousemove(function (e) {
if (is_dragging) {
$("#dialog").offset({
top: e.clientY - offset_y,
left: e.clientX - offset_x
});
}
});
$(document).mouseup(function () {
is_dragging = false;
});
///////////////////////////////////////////////////// 字体 背景 /////////////////////////////////////////////////////
///////////////////////////////////////////////////// 字体
//初始化对话框全部字体缩图
function initDialogFontShowArea() {
for (let i = 0; i < myfonts.length; i++) {
var font_btn = document.createElement("button");
font_btn.textContent = myfonts[i].name;
font_btn.style.fontFamily = myfonts[i].font;
font_btn.classList.add("font-show-area-btn");
if (!isSupportFontFamily(myfonts[i].font)) {
font_btn.classList.add("font-show-area-font-absence");
}
font_btn.addEventListener("click", function () {
changeFont(i);
});
$("#font_show_area").append(font_btn);
}
var bak = GM_getValue("font_index", -1);
changeFontSelectedBorder(bak);
}
/* 改变字体
index:使用字体序号
*/
function changeFont(index) {
var font = myfonts[index].font;
var font_style_str = `*{font-family: ${font} ;}`;
console.log("切换字体-> " + index + " font:" + font);
GM_addStyle(font_style_str);
GM_setValue("font_index", index);
changeFontSelectedBorder(index);
afterFontSelected();
// location.reload();
}
//改变选中字体边框
function changeFontSelectedBorder(index) {
var buttons = $("#font_show_area button");
for (var i = 0; i < buttons.length; i++) {
if (i == index) {
buttons[i].style.border = "2px solid silver";
} else {
buttons[i].style.border = "none";
}
}
}
//改变选中字体后对话框字体保持原字体
function afterFontSelected() {
var buttons = $("#font_show_area button");
for (var i = 0; i < buttons.length; i++) {
buttons[i].style.fontFamily = `${myfonts[i].font} !important`;
}
}
/* 判断用户操作系统是否安装某字体
https://www.zhangxinxu.com/wordpress/2018/02/js-detect-suppot-font-family/
*/
var isSupportFontFamily = function (f) {
if (typeof f != "string") {
return false;
}
var h = "Arial";
if (f.toLowerCase() == h.toLowerCase()) {
return true;
}
var e = "a";
var d = 100;
var a = 100,
i = 100;
var c = document.createElement("canvas");
var b = c.getContext("2d");
c.width = a;
c.height = i;
b.textAlign = "center";
b.fillStyle = "black";
b.textBaseline = "middle";
var g = function (j) {
b.clearRect(0, 0, a, i);
b.font = d + "px " + j + ", " + h;
b.fillText(e, a / 2, i / 2);
var k = b.getImageData(0, 0, a, i).data;
return [].slice.call(k).filter(function (l) {
return l != 0;
});
};
return g(h).join("") !== g(f).join("");
};
///////////////////////////////////////////////////// 字体颜色
$("#font_color_show_area").append(`
<input type="color" id="font_color" name="font_color" value="#ffffff" />
<label for="font_color" class="font-color-show-area-label"></label>
<button class="font-color-show-area-btn" id="font_color_open_btn">开启</button><button class="font-color-show-area-btn" id="font_color_close_btn">关闭</button>
`);
$("#font_color").on("input", function () {
console.log("触发了input");
var color = $(this).val();
changeFontColor(true, color);
});
$("#font_color").change(function () {
console.log("触发了change");
var color = $(this).val();
GM_setValue("font_color", color);
changeFontColor();
});
//初始化对话框字体颜色展示区域
function initDialogFontColorShowArea() {
var font_color = GM_getValue("font_color", "#000000");
var font_color_open = GM_getValue("font_color_open", false);
if (font_color_open) {
$("#font_color_open_btn").css("border", "2px solid fuchsia");
$("#font_color_close_btn").css("border", "none");
} else {
$("#font_color_close_btn").css("border", "2px solid fuchsia");
$("#font_color_open_btn").css("border", "none");
}
}
/*改变字体颜色
temp: 动态变换字体,方便看效果
*/
function changeFontColor(temp = false, color = "#000000") {
var color_str = `.readerChapterContent {color: ${color} !important;}`;
//动态查看效果使用
if (temp) {
GM_addStyle(color_str);
$('label[for="font_color"]').text(color);
return;
}
var font_color = GM_getValue("font_color", "#000000");
var font_color_open = GM_getValue("font_color_open", false);
if (font_color_open) {
color_str = `.readerChapterContent {color: ${font_color} !important;}`;
GM_addStyle(color_str);
$('label[for="font_color"]').text(font_color);
} else {
color_str = `.readerChapterContent {color: #000000 !important;}`;
GM_addStyle(color_str);
$('label[for="font_color"]').text("");
}
}
$("#font_color_open_btn").click(function () {
GM_setValue("font_color_open", true);
$("#font_color_open_btn").css("border", "2px solid aqua");
$("#font_color_close_btn").css("border", "none");
changeFontColor();
});
$("#font_color_close_btn").click(function () {
GM_setValue("font_color_open", false);
$("#font_color_close_btn").css("border", "2px solid aqua");
$("#font_color_open_btn").css("border", "none");
changeFontColor();
});
///////////////////////////////////////////////////// 背景图片
//初始化对话框全部背景图片缩图
function initDialogBackgroundImageShowArea() {
for (let i = 0; i < background_image_urls.length; i++) {
//GM_xmlhttpRequest存在异步问题导致图片和序号不对应,暂时使用setTimeout解决
setTimeout(() => {
addDialogBackgroundImageShow(i);
}, i * 100);
}
setTimeout(() => {
var bak = GM_getValue("background_image_index", -1);
changeBackgroundImageSelectedBorder(bak);
}, (background_image_urls.length + 2) * 100);
}
//对话框追加背景图片缩图
function addDialogBackgroundImageShow(index) {
var url2 = background_image_urls[index];
GM_xmlhttpRequest({
method: "GET",
url: url2,
responseType: "blob",
synchronous: true,
onload: function (response) {
var blobUrl = URL.createObjectURL(response.response);
var img = document.createElement("img");
img.src = blobUrl;
img.style.width = "50px";
img.style.height = "50px";
img.style.margin = "3px";
img.style.padding = "3px";
img.addEventListener("click", function () {
changeBackgroundImage(index);
});
$("#background_image_show_area").append(img);
}
});
}
/* 改变背景图片
index:使用背景图片序号
dbClickCancel:是否双击取消背景图片
当$background_image_index和index相同时取消背景图片,也就是点击同一个背景图片两次时取消背景图片
*/
function changeBackgroundImage(index, dbClickCancel = true) {
var bak = GM_getValue("background_image_index", -1);
// 又被点击了一次,取消背景图片
if (bak == index && dbClickCancel) {
index = -1;
}
var background_image_style_str =
".readerContent .app_content {background-image: none;}";
if (index > -1) {
background_image_style_str =
".readerContent .app_content {background-image: url('" +
background_image_urls[index] +
"');}";
}
console.log(
"切换背景图片-> " + index + " url:" + background_image_urls[index]
);
GM_addStyle(background_image_style_str);
GM_setValue("background_image_index", index);
changeBackgroundImageSelectedBorder(index);
}
function changeBackgroundImageSelectedBorder(index) {
var images = $("#background_image_show_area img");
for (var i = 0; i < images.length; i++) {
if (i == index) {
images[i].style.border = "2px solid green";
} else {
images[i].style.border = "none";
}
}
}
///////////////////////////////////////////////////// 背景颜色
$("#background_color_show_area").append(`
<input type="color" id="background_color" name="background_color" value="#ffffff" />
<label for="background_color" class="background-color-show-area-label"></label>
<button class="background-color-show-area-btn" id="background_color_open_btn">开启</button><button class="background-color-show-area-btn" id="background_color_close_btn">关闭</button>
`);
$("#background_color").on("input", function () {
var color = $(this).val();
changeBackgroundColor(true, color);
});
$("#background_color").change(function () {
var color = $(this).val();
GM_setValue("background_color", color);
changeBackgroundColor();
});
//初始化对话框背景颜色展示区域
function initDialogBackgroundColorShowArea() {
var background_color = GM_getValue("background_color", "#d8e2c8");
var background_color_open = GM_getValue("background_color_open", false);
if (background_color_open) {
$("#background_color_open_btn").css("border", "2px solid maroon");
$("#background_color_close_btn").css("border", "none");
} else {
$("#background_color_close_btn").css("border", "2px solid maroon");
$("#background_color_open_btn").css("border", "none");
}
//自定义背景颜色按钮
$("#background_color_show_area").append("<br>");
for (let i = 0; i < mybackground_colors.length; i++) {
var item = mybackground_colors[i];
var background_color_btn = document.createElement("button");
background_color_btn.textContent = item.name;
background_color_btn.style.backgroundColor = item.color;
background_color_btn.classList.add(
"custom-background-color-show-area-btn"
);
$("#background_color_show_area").append(background_color_btn);
}
}
function changeBackgroundColor(temp = false, color = "none") {
var color_str = `.readerContent .app_content{background-color: ${color} !important;}`;
//动态查看效果使用
if (temp) {
GM_addStyle(color_str);
$('label[for="background_color"]').text(color);
return;
}
var background_color = GM_getValue("background_color", "#d8e2c8");
var background_color_open = GM_getValue("background_color_open", false);
if (background_color_open) {
color_str = `.readerContent .app_content{background-color: ${background_color} !important;}`;
GM_addStyle(color_str);
$('label[for="background_color"]').text(background_color);
} else {
color_str = `.readerContent .app_content{background-color: transparent !important;}`;
GM_addStyle(color_str);
$('label[for="background_color"]').text("");
}
}
$("#background_color_open_btn").click(function () {
GM_setValue("background_color_open", true);
$("#background_color_open_btn").css("border", "2px solid maroon");
$("#background_color_close_btn").css("border", "none");
changeBackgroundColor();
});
$("#background_color_close_btn").click(function () {
GM_setValue("background_color_open", false);
$("#background_color_close_btn").css("border", "2px solid maroon");
$("#background_color_open_btn").css("border", "none");
changeBackgroundColor();
});
$("#background_color_show_area").on(
"click",
".custom-background-color-show-area-btn",
function () {
var selectedColorName = $(this).text();
var selectedColor = getColorByName(selectedColorName);
GM_setValue("background_color", selectedColor);
$("#background_color").val(selectedColor);
changeBackgroundColor();
}
);
function getColorByName(colorName) {
for (let i = 0; i < mybackground_colors.length; i++) {
if (mybackground_colors[i].name === colorName) {
return mybackground_colors[i].color;
}
}
return "transparent"; // 如果未找到对应颜色,可以返回null或者其他自定义值
}
///////////////////////////////////////////////////// 宽度 /////////////////////////////////////////////////////
$("#width_show_area").append(`
<input type="range" min="30" max="100" value="60" style="width:300px" id="width_control">
<span id="width_control_text"></span>%<button class="width-show-area-btn" id="default_width_btn">默认</button>
`);
$("#width_control").on("input", function () {
var width_radio = $(this).val();
$("#width_control_text").text(width_radio);
var new_width = Math.floor((window.innerWidth * width_radio) / 100);
GM_setValue("width_radio", width_radio);
changeWidth(new_width);
});
//改变文章宽度
function changeWidth(new_width) {
const item1 = document.querySelector(".readerContent .app_content");
const item2 = document.querySelector(".readerTopBar");
item1.style["max-width"] = new_width + "px";
item2.style["max-width"] = new_width + "px";
const myEvent = new Event("resize");
window.dispatchEvent(myEvent);
}
//初始化宽度
function initWidth() {
const item1 = document.querySelector(".readerContent .app_content");
const defaultOriginWidth = getElementMaxWidth(item1);
GM_setValue("default_origin_width", defaultOriginWidth);
var width_radio = GM_getValue("width_radio", 60);
$("#width_control").val(width_radio);
$("#width_control_text").text(width_radio);
var new_width = Math.floor((window.innerWidth * width_radio) / 100);
changeWidth(new_width);
}
//获取元素最大宽度
function getElementMaxWidth(element) {
let currentValue = window.getComputedStyle(element).maxWidth;
currentValue = currentValue.substring(0, currentValue.indexOf("px"));
currentValue = parseInt(currentValue);
return currentValue;
}
$("#default_width_btn").click(function () {
var default_origin_width = GM_getValue("default_origin_width", 600);
changeWidth(default_origin_width);
var width_radio = Math.floor(
(default_origin_width * 100) / window.innerWidth
);
GM_setValue("width_radio", width_radio);
$("#width_control").val(width_radio);
$("#width_control_text").text(width_radio);
});
///////////////////////////////////////////////////// 自动滚动 /////////////////////////////////////////////////////
$("#auto_scroll_show_area").append(`
<label for="scroll_interval">滚动间隔:</label>
<input type="number" id="scroll_interval" name="scroll_interval">ms
<br>
<label for="scroll_speed">滚动距离:</label>
<input type="number" id="scroll_speed" name="scroll_speed" >px
<br>
<label for="scroll_speed">翻页等待:</label>
<input type="number" id="next_page_wait_threshold" name="next_page_wait_threshold" >ms
`);
$(".readerControls").append(
"<button id='auto_scroll_speed_acc' class='readerControls_item' style='color:#6a6c6c;cursor:pointer;'>滚动加速</button><button id='auto_scroll_speed_dec' class='readerControls_item' style='color:#6a6c6c;cursor:pointer;'>滚动减速</button><button id='auto_scroll_pause' class='readerControls_item' style='color:#6a6c6c;cursor:pointer;'>开始滚动</button>"
);
// 初始滚动状态
let is_scrolling = false;
//滚动间隔
let scroll_interval = GM_getValue("scroll_interval", 20);
// 初始滚动速度
let scroll_speed = GM_getValue("scroll_speed", 1);
// 等待翻页阈值
let next_page_wait_threshold = GM_getValue("next_page_wait_threshold", 1000);
//滚动事件标识
let interval_event_id;
//上次滚动位置
let last_scroll_pos = -1;
//已等待时间
let next_page_wait = 0;
//最小滚动间隔
let min_scroll_interval = 20;
// 最小初始滚动速度
let min_scroll_speed = 1;
// 最小等待翻页阈值
let min_next_page_wait_threshold = 500;
$("#auto_scroll_speed_acc").click(function () {
scroll_speed++;
GM_setValue("scroll_speed", scroll_speed);
var text = $("#auto_scroll_pause").text().substring(0, 2);
$("#auto_scroll_pause").html(text + scroll_speed);
$("#scroll_speed").val(scroll_speed);
});
$("#auto_scroll_speed_dec").click(function () {
scroll_speed--;
if (scroll_speed < min_scroll_speed) {
scroll_speed = 1;
}
GM_setValue("scroll_speed", scroll_speed);
var text = $("#auto_scroll_pause").text().substring(0, 2);
$("#auto_scroll_pause").html(text + scroll_speed);
$("#scroll_speed").val(scroll_speed);
});
$("#auto_scroll_pause").click(function () {
is_scrolling = !is_scrolling;
if (is_scrolling) {
interval_event_id = setInterval(autoScroll, scroll_interval);
$("#auto_scroll_pause").html("暂停" + scroll_speed);
} else {
clearInterval(interval_event_id);
$("#auto_scroll_pause").html("继续" + scroll_speed);
}
});
$("#scroll_interval").on("change", function () {
var new_scroll_interval = $(this).val();
scroll_interval = new_scroll_interval;
if (scroll_interval < min_scroll_interval) {
scroll_interval = min_scroll_interval;
$("#scroll_interval").val(scroll_interval);
}
GM_setValue("scroll_interval", scroll_interval);
});
$("#scroll_speed").on("change", function () {
var new_scroll_speed = $(this).val();
scroll_speed = new_scroll_speed;
if (scroll_speed < min_scroll_speed) {
scroll_speed = min_scroll_speed;
$("#scroll_speed").val(scroll_speed);
}
GM_setValue("scroll_speed", scroll_speed);
var text = $("#auto_scroll_pause").text().substring(0, 2);
$("#auto_scroll_pause").html(text + scroll_speed);
});
$("#next_page_wait_threshold").on("change", function () {
var new_next_page_wait_threshold = $(this).val();
next_page_wait_threshold = new_next_page_wait_threshold;
if (next_page_wait_threshold < min_next_page_wait_threshold) {
next_page_wait_threshold = min_next_page_wait_threshold;
$("#next_page_wait_threshold").val(next_page_wait_threshold);
}
GM_setValue("next_page_wait_threshold", next_page_wait_threshold);
});
function autoScroll() {
var distance = scroll_speed;
window.scrollBy(0, distance);
let scroll_pos = $(this).scrollTop();
// 到底后会一直一样,累加等待时间
if (last_scroll_pos == scroll_pos) {
next_page_wait = parseInt(next_page_wait) + parseInt(scroll_interval);
let progress = Math.floor(
(next_page_wait * 100) / next_page_wait_threshold
);
GM_addStyle(
`.next-page-tip-progress { width: ${progress}px; background-color: #d8e2c8; }`
);
} else {
next_page_wait = 0;
}
last_scroll_pos = scroll_pos;
// 开始显示翻页条
if (next_page_wait > 200) {
console.log(
"next_page_wait:" +
next_page_wait +
",next_page_wait_threshold:" +
next_page_wait_threshold
);
$("#next_page_tip").fadeIn();
} else {
$("#next_page_tip").fadeOut();
}
// 到达阈值,翻页
if (next_page_wait > next_page_wait_threshold) {
document.dispatchEvent(
new KeyboardEvent("keydown", {
bubbles: true,
cancelable: true,
keyCode: 39
})
);
}
}
//初始化对话框自动滚动配置区域
function initDialogAutoScrollShowArea() {
$("#scroll_interval").val(scroll_interval);
$("#scroll_speed").val(scroll_speed);
$("#next_page_wait_threshold").val(next_page_wait_threshold);
}
///////////////////////////////////////////////////// 隐藏显示工具栏 /////////////////////////////////////////////////////
let reader_controls = $(".readerControls");
$(document).mousemove(function (event) {
// 获取鼠标指针相对于文档的位置
let mouse_x = event.pageX;
// 获取屏幕宽度
let screen_width = $(window).width();
// 如果鼠标指针距离屏幕最右侧200px内,则显示reader_controls,否则隐藏
if (screen_width - mouse_x <= 200) {
reader_controls.css("opacity", "1");
} else {
reader_controls.css("opacity", "0");
}
});
///////////////////////////////////////////////////// 下滑不显示标题栏 /////////////////////////////////////////////////////
var window_top = 0;
$(window).scroll(function () {
let scroll_dis = $(this).scrollTop();
let reader_top_bar = $(".readerTopBar");
if (scroll_dis > window_top) {
// 下滑隐藏
reader_top_bar.css("opacity", "0");
} else {
// 上滑到最顶端显示
reader_top_bar.css("opacity", "1");
}
});
///////////////////////////////////////////////////// 启动初始化 /////////////////////////////////////////////////////
//页面加载时初始化
function pageLoad() {
console.log("pageLoad");
//打开对话框时渲染已选中的字体、背景图片缩图
initDialog();
//初始化字体
initFont();
//初始化字体颜色
initFontColor();
//初始化背景图片
initBackgroundImage();
//初始化背景颜色
initBackgroundColor();
//初始化宽度
initWidth();
}
//初始化背景图片
function initBackgroundImage() {
var bak = GM_getValue("background_image_index", -1);
changeBackgroundImage(bak, false);
}
//初始化背景颜色
function initBackgroundColor() {
var background_color = GM_getValue("background_color", "#d8e2c8");
$("#background_color").val(background_color);
changeBackgroundColor();
}
//初始化字体颜色
function initFontColor() {
var font_color = GM_getValue("font_color", "#000000");
$("#font_color").val(font_color);
changeFontColor();
}
//初始化字体
function initFont() {
var bak = GM_getValue("font_index", 0);
changeFont(bak);
}
//打开对话框时渲染已选中的字体、背景图片缩图
function initDialog() {
//初始化对话框字体颜色展示区域
initDialogFontColorShowArea();
//初始化对话框背景颜色展示区域
initDialogBackgroundColorShowArea();
//初始化对话框全部背景图片缩图
initDialogBackgroundImageShowArea();
//初始化对话框全部字体缩图
initDialogFontShowArea();
//初始化对话框自动滚动配置区域
initDialogAutoScrollShowArea();
}
pageLoad();
})();