您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
希赛页面优化
// ==UserScript== // @name EduCity // @name:zh-CN 希赛 // @description Optimize the website of educity.cn. // @description:zh-CN 希赛页面优化 // @namespace https://github.com/HaleShaw // @version 1.4.8 // @author HaleShaw // @copyright 2021+, HaleShaw (https://github.com/HaleShaw) // @license AGPL-3.0-or-later // @homepage https://github.com/HaleShaw/TM-EduCity // @supportURL https://github.com/HaleShaw/TM-EduCity/issues // @contributionURL https://www.jianwudao.com/ // @icon https://wangxiao.xisaiwang.com/favicon.ico // @match https://www.educity.cn/wangxiao2/* // @match http://www.educity.cn/wangxiao2/* // @match https://uc.educity.cn/personalCenter/studyCenter.html // @match https://uc.educity.cn/tiku/testReport.html* // @match https://uc.educity.cn/tiku/examinationMode.html* // @match https://uc.educity.cn/tiku/examinationModeCopy.html* // @match https://wangxiao.xisaiwang.com/* // @compatible Chrome // @grant GM_addStyle // @grant GM_info // ==/UserScript== // ==OpenUserJS== // @author HaleShaw // @collaborator HaleShaw // ==/OpenUserJS== (function () { "use strict"; const mainStyle = ` /* 顶部菜单 */ div.ecv2_header_tools > div.fl > ul > li:not(:first-child), div.ecv2_header_tools > div.fr > :not(:last-child), /* Footer */ .ecv2_footer { display: none !important; } `; const zhiBoStyle = ` /* 左上角标题 */ #mainVid > div.vid_head > div.vid_hleft > a:not(:last-child), /* 右上角“返回旧版、视频课程” */ #mainVid > div.vid_head > div.vid_hright > a, /* 离线观看 */ #mainVid > div.vid_mid > div.vid_midL > div.vid_midL_top, /* 右侧笔记、提问 */ #mainVid > div.vid_mid > div.vid_midR > div.vid_midR_tab > div > a:nth-child(2), #mainVid > div.vid_mid > div.vid_midR > div.vid_midR_tab > div > a:nth-child(3), /* 鼠标混入视频时的浮标按钮“新建笔记” */ .vid_bj_new, /* 顶部横条 */ .vid_head { display: none !important; } .vid_head .vid_hright { padding-top: 0 !important; } .vid_mid .vid_midL { padding: 0 !important; } .vid_midR_tab, .vid_midR_tab > a, .vid_midR_tab > a > i, .vid_midR_tab > .vid_midR_ul, .vid_midR_tab > .vid_midR_ul > a, .vid_midR_tab > .vid_midR_ul > a > i, .tabhide .vid_midR{ width: 28px !important; } .tabhide .vid_mid { padding-right: 28px; } .vid_mid { padding-right: 439px; } .vid_midR { width: 439px; } .vid_tab_content { padding-bottom: 0; } /* 进度条上的时间 */ .time-span { margin: 0 10px; } /* 视频播放窗口上的遮罩元素 */ #videoCoverTop { width: 100%; height: 17.4%; position: absolute; left: 0; top: 0; text-align: center; padding-top: 1.5rem; font-size: 1.75rem; z-index: 1; background-color: black; } #videoCoverBottom { position: absolute; width: 100%; height: 14%; background-color: black; z-index: 2; left: 0; bottom: 0; display: flex; align-items: flex-end; justify-content: right; padding-bottom: 63px; } #videoCoverLeft { position: absolute; width: 25.4%; height: 43%; background-color: white; z-index: 0; left: 0; bottom: 14%; } /* 视频播放窗口进度条上的时间 */ .pv-time-remaining-real.time-span, .pv-time-over.time-span { color: yellow; } `; // 测试报告页面样式 const reportStyle = ` /* 顶部广告 */ #accountSettingsHeader, /* 专家建议 */ div.col-md-7.testportSty > p, div.col-md-7.testportSty > a, /* 笔记、提问 */ div.doPane.note, div.doPane.question, /* 参考答案,你的答案 */ .answerEnd, /* 选项前的radio */ .answerContentList.mgt10 > .cbox, /* 查看解析,收藏*/ #dataListWarp > div.dajx > div.pull-right.clearfix { display: none !important; } `; // 考试或练习页面 const examStyle = ` /* 顶部图片Header */ #accountSettingsHeader, /* 右上角二维码 */ div.zt_top_right, /* 正确答案与错误答案选项 */ .analysisAnswer>div.bg-fff.box-shadow.mgt10:first-child, /* 答案解析中的“笔记”和“提问” */ div.tknew.doPane.note, div.tknew.doPane.question, div.col-md-12>div>div.zt_top_right, .lh2>span, #accountSettingsHeader, .center.answerCard, .pull-right>span:not(:first-child), .answerTitle { display: none !important; } /* 右侧题目编号列表 */ .dtklist.item { height: 500px; } /* 选项前的CheckBox */ div.answerContentList>span.cbox { display: inline-block !important; } /* 标题 */ .zt_top_zong { height: 50px; background: none !important; } .right-title { padding: 0px 20px !important; margin-bottom: 0px !important; } /* 进度条 */ .jindu_div { margin: 5px 0 !important; } .jindu_div .jindu_line { width: calc(100% - 200px); } .bp20 { padding: 5px !important; } .ISpan { margin-bottom: 2px !important; margin-right: 0 !important; } div.answerList.mgb20 { padding: 0 15px 0 25px !important; margin-bottom: 0px !important; } /* 题干 */ .subject-content { padding: 0px 30px !important; background: none !important; min-height: 320px !important; } .single-content { padding: 5px 10px !important; } .lh2 { margin-bottom: 5px !important; } .examTigan { max-height: 600px; overflow-y: auto; display: block; } .examTigan, .examTigan > p, .answerContentList > label { font-size: 2.2rem !important; } /* 选项列表 */ .answerContentList > label { color: #666; } /* 参考解析 */ div.analysisAnswer>div { padding-bottom: 0px !important; } .answerEnd { padding: 0 !important; margin-top: 0 !important; } .answerList { padding: 0 15px 5px 25px !important; } .shitiDesp.pdt15 { padding-top: 0 !important; } .jiexinew { padding: 10px 30px 0 30px !important; } #jiexispan>p { margin-bottom: 0 !important; } .countTime { padding: 0 !important; } #ztsetWrap>div.bg-fff.box-shadow { margin-bottom: 0 !important; } /* 顶部标题高度 */ .mgt10 { margin-top: 0px !important; } .lh2 { font-weight: bolder !important; color: #337ab7 !important; font-size: 1.125em !important; } .spanExplain { padding: 5px 20px !important; } .exBtn { margin-top: 5px !important; } .answerWrap { padding: 0px 30px !important; } .mgb20 { margin-bottom: 0px !important; } .singleR { font-size: 16px; } `; // 个人中心页面 const personalStyle = ` /* 班主任微信 */ #baomingDiv > .kcgw_weixin, /* 用户ID,我的报名 */ div.xpc_top_info > div.xpc_top_V2, /* 左侧边栏菜单栏 */ div.xpc-menu-box > dl:last-child, div.xpc-menu-box > dl:nth-last-child(2):nth-child(odd), div.xpc-menu-box > dl:nth-child(2) > dd:last-child, /* 右侧悬浮工具 */ .ecv2_right_tools { display: none !important; } #cHeadImg { height: 48px; width: 48px; } .xpc_top, .xpc_top .xpc_top_con, .xpc_top .xpc-top-message li a { height: 60px !important; } /* 播放列表 */ .ecv2_live_taggleTitles { padding: 5px 20px 5px 20px !important; } .ecv2_live_taggleHide li { padding: 5px 0 5px 68px !important; } .xpc_zbmulu { padding: 0 20px !important; } /* 主窗口 */ .xpc_main .xpc_main_con { padding: 0 !important; } `; const ANSWER_LIST = ["A", "B", "C", "D"]; main(); function main() { logInfo(GM_info.script.name, GM_info.script.version); GM_addStyle(mainStyle); let url = window.location.href; // 个人中心页面 if (url.startsWith("https://wangxiao.xisaiwang.com/ucenter2/")) { GM_addStyle(personalStyle); setTimeout(() => { updatePlayButton(); }, 1500); } else if ( url.startsWith("https://www.educity.cn/wangxiao2") || url.startsWith("http://www.educity.cn/wangxiao2") || url.startsWith("https://wangxiao.xisaiwang.com/wangxiao2/") ) { // 直播回放调节播放速度 setTimeout(() => { addCover(); updateSpeed(); }, 1500); } else if (url.startsWith("https://wangxiao.xisaiwang.com/tiku2/ctjx")) { // 独立的错题解析页面,添加键盘事件 GM_addStyle(examStyle); addLeftRightKeyListener(); } else if (url.startsWith("https://wangxiao.xisaiwang.com/tiku2/sectionReport")) { // 测试报告页面 GM_addStyle(reportStyle); showWrongTopics(); } else if ( url.startsWith("https://uc.educity.cn/tiku/examinationModeCopy.html") || url.startsWith("https://uc.educity.cn/tiku/examinationMode.html") || url.startsWith("https://wangxiao.xisaiwang.com/tiku2/exam") ) { // 添加键盘监听事件,按键答题 GM_addStyle(examStyle); addKeyListener(); } } /** * 更新播放按钮事件 * 将原有事件移除,在新页面打开播放页面。 */ function updatePlayButton() { let buttons = document.querySelectorAll( 'div.detail-course-top > a.detail-course-btnC.buyProductDetail[data-type="Video"]' ); for (let i = 0; i < buttons.length; i++) { buttons[i].removeAttribute("onclick"); buttons[i].setAttribute("target", "_blank"); const uri = "/wangxiao2/c" + $(buttons[i]).attr("data-cid") + "/sp" + $(buttons[i]).attr("data-id") + ".html"; buttons[i].setAttribute("href", uri); } } function updateSpeed() { GM_addStyle(zhiBoStyle); addRemainingTime(); updateVideoTitle(); addRateButton(); addRateListener(); updateSideHeight(); addPersonalCenter(); } /** * 添加视频播放窗口上的遮罩元素 */ function addCover() { let parentEle = document.querySelector(".pv-video-wrap"); let videoCoverTop = document.getElementById("videoCoverTop"); let videoCoverBottom = document.getElementById("videoCoverBottom"); let videoCoverLeft = document.getElementById("videoCoverLeft"); let title = document.querySelector("a.log.pointer.video-player.act").textContent.trim(); if (parentEle && !videoCoverTop && !videoCoverBottom && !videoCoverLeft) { parentEle.appendChild( $( `<div id="videoCoverTop">${title} 剩余课时:${getRemainingClass()}</div>` )[0] ); parentEle.appendChild( $(`<div id="videoCoverBottom"><span class="videoCoverBottom"></span></div>`)[0] ); parentEle.appendChild($(`<div id="videoCoverLeft"></div>`)[0]); } } /** * 添加倍速按钮 */ function addRateButton() { if (!$(".pv-rate-select") || $(".pv-rate-select").length == 0) { return; } $( '<div data-rate="4">4x</div><div data-rate="3.5">3.5x</div><div data-rate="3">3x</div><div data-rate="2.5">2.5x</div>' ).insertBefore($(".pv-rate-select").children().eq(0)); } // 获取当前倍速 function getCurrentRate() { let rate = 1.0; let rateEle = document.querySelector("button.pv-rate-btn>span"); if (!rateEle) { return rate; } rate = rateEle.textContent.replace("x", ""); return rate; } /** * 添加控制播放速度的监听事件,仅用于更新显示当前速度,速度控制通过其他通用三方脚本实现。 */ function addRateListener() { let rateEle = document.querySelector("button.pv-rate-btn>span"); document.onkeyup = function (e) { var theEvent = e || window.event; var code = theEvent.keyCode || theEvent.which || theEvent.charCode; if (code == 88) { // X,减速 let rate = getCurrentRate(); let newRate = (new Number(rate) - new Number(0.1)).toFixed(1); let rateStr = newRate + "x"; rateEle.textContent = rateStr; updateRate(rateStr); } if (code == 67) { // C,加速 let rate = getCurrentRate(); let newRate = (new Number(rate) + new Number(0.1)).toFixed(1); let rateStr = newRate + "x"; rateEle.textContent = rateStr; updateRate(rateStr); } if (code == 90) { // Z,恢复正常速度 rateEle.textContent = "1x"; updateRate("1x"); } }; } /** * 更新右侧边栏上的播放倍率 * @param {String} rate 播放倍率 */ function updateRate(rate) { let rateEle = document.querySelector("span.rateRight"); if (rateEle) { rateEle.textContent = rate; } else { document .querySelector(".vid_midR_tab") .appendChild($(`<span class="rateRight">${rate}</span>`)[0]); } } /** * 更新右侧侧边栏高度 */ function updateSideHeight() { let sideBar = document.querySelector(".vid_midR_tab"); if (!sideBar) { return; } sideBar.style.height = sideBar.parentElement.previousElementSibling.offsetHeight + "px"; document.querySelector(".vid_midR_wrap").style.height = sideBar.parentElement.previousElementSibling.offsetHeight + "px"; } /** * 添加个人中心按钮 */ function addPersonalCenter() { $('<a href="/ucenter2/personal/index.html" target="_blank">个人中心</a>').insertBefore( $(".vid_midR_tab").children().eq(0) ); } // 添加键盘监听事件,按键答题 function addKeyListener() { document.onkeyup = function (e) { var theEvent = e || window.event; var code = theEvent.keyCode || theEvent.which || theEvent.charCode; // Spacebar. 查看答案解析 if (code == 32 && document.getElementsByClassName("col-md-4 center bottomCenter bp20")[0]) { if (validatePause()) { return; } document.getElementsByClassName("col-md-4 center bottomCenter bp20")[0].click(); if (document.getElementsByClassName("tknew doPane question")[0]) { try { onQestion(); } catch (error) { console.error(error, "展开提问失败!"); } } scrollToBottom(); } // Q. 查看提问 if (code == 81 && document.getElementsByClassName("tknew doPane question")[0]) { if (validatePause()) { return; } try { onQestion(); } catch (error) { console.error(error, "展开提问失败!"); } scrollToBottom(); } // Left Arrow. if (code == 37 && document.getElementsByClassName("col-md-4 center bp20 bLeftWrap")[0]) { if (validatePause()) { return; } let btn = document.getElementsByClassName("col-md-4 center bp20 bLeftWrap")[0]; if (btn.classList.contains("notclickn")) { return; } btn.click(); setTimeout(() => { let tiGan = document.querySelector("div.examTigan"); scrollElementToBottom(tiGan); }, 200); scrollToBottom(); } // Right Arrow. if (code == 39 && document.getElementsByClassName("col-md-4 center bp20 bRightWrap")[0]) { if (validatePause()) { return; } let btn = document.getElementsByClassName("col-md-4 center bp20 bRightWrap")[0]; if (btn.classList.contains("notclickn")) { return; } btn.click(); setTimeout(() => { let tiGan = document.querySelector("div.examTigan"); scrollElementToBottom(tiGan); }, 200); scrollToBottom(); } // A,1. if (code == 49 || code == 65 || code == 97) { if (validatePause()) { return; } document.getElementById("slec0A").click(); scrollToBottom(); } // B,2. if (code == 50 || code == 66 || code == 98) { if (validatePause()) { return; } document.getElementById("slec0B").click(); scrollToBottom(); } // C,3. if (code == 51 || code == 67 || code == 99) { if (validatePause()) { return; } document.getElementById("slec0C").click(); scrollToBottom(); } // D,4. if (code == 52 || code == 68 || code == 100) { if (validatePause()) { return; } document.getElementById("slec0D").click(); scrollToBottom(); } // J. 标记 if (code == 74 && document.getElementsByClassName("bj_icon addBiaoji")[0]) { if (validatePause()) { return; } document.getElementsByClassName("bj_icon addBiaoji")[0].click(); setTimeout(function () { if (document.getElementsByClassName("swal-button swal-button--confirm")[0]) { document.getElementsByClassName("swal-button swal-button--confirm")[0].click(); document.getElementsByClassName("col-md-4 center bp20 bRightWrap")[0].click(); } }, 300); } // J. 取消标记 if (code == 74 && document.getElementsByClassName("bj_icon cancelBiaoji")[0]) { if (validatePause()) { return; } document.getElementsByClassName("bj_icon cancelBiaoji")[0].click(); setTimeout(function () { if (document.getElementsByClassName("swal-button swal-button--confirm")[0]) { document.getElementsByClassName("swal-button swal-button--confirm")[0].click(); } }, 300); } // P.暂停 if (code == 80 && document.getElementsByClassName("inline-block zanTing")[0]) { document.getElementsByClassName("inline-block zanTing")[0].click(); } // P.继续做题 if ( code == 80 && document.getElementsByClassName("swal-button swal-button--confirm")[0] && document.getElementsByClassName("swal-button swal-button--confirm")[0].textContent == "继续做题" ) { document.getElementsByClassName("swal-button swal-button--confirm")[0].click(); } }; } // 添加左右方向键监听事件 function addLeftRightKeyListener() { document.onkeyup = function (e) { var theEvent = e || window.event; var code = theEvent.keyCode || theEvent.which || theEvent.charCode; // Q. 查看提问 if (code == 81 && document.getElementsByClassName("tknew doPane question")[0]) { if (validatePause()) { return; } try { onQestion(); } catch (error) { console.error(error, "展开提问失败!"); } scrollToBottom(); } // Left Arrow. if (code == 37 && document.getElementsByClassName("col-md-4 center bp20 bLeftWrap")[0]) { if (validatePause()) { return; } let btn = document.getElementsByClassName("col-md-4 center bp20 bLeftWrap")[0]; if (btn.classList.contains("notclickn")) { return; } btn.click(); if (document.getElementsByClassName("tknew doPane question")[0]) { try { onQestion(); } catch (error) { console.error(error, "展开提问失败!"); } } scrollToBottom(); } // Right Arrow. if (code == 39 && document.getElementsByClassName("col-md-4 center bp20 bRightWrap")[0]) { if (validatePause()) { return; } let btn = document.getElementsByClassName("col-md-4 center bp20 bRightWrap")[0]; if (btn.classList.contains("notclickn")) { return; } btn.click(); if (document.getElementsByClassName("tknew doPane question")[0]) { try { onQestion(); } catch (error) { console.error(error, "展开提问失败!"); } } scrollToBottom(); } }; } // 只看错题 function showWrongTopics() { loadErrData(); setTimeout(() => { let showButtons = document.querySelectorAll("#dataListWarp>ul>li>h4.chak.zhank"); for (let i = 0; i < showButtons.length; i++) { showButtons[i].click(); } }, 800); setTimeout(() => { let explainButtons = document.querySelectorAll( "#dataListWarp>div.dajx>div.pull-right.clearfix>a.ckjx" ); for (let i = 0; i < explainButtons.length; i++) { explainButtons[i].click(); } }, 1500); setTimeout(() => { autoFillAnswer(); }, 2000); } // 自动填充答案 function autoFillAnswer() { const answers = document.getElementsByClassName("answerEnd"); for (let i = 0; i < answers.length; i++) { let ans = answers[i].children[0].innerText.replace("参考答案:", "").replace(/\s+/g, ""); let your = answers[i].children[1].innerText.replace("你的答案:", "").replace(/\s+/g, ""); if (ans != your) { let ansId = ANSWER_LIST.indexOf(ans); let yourId = ANSWER_LIST.indexOf(your); let ansList = answers[i].parentElement.parentElement.querySelectorAll( ".answerContentList.mgt10" ); ansList[ansId].style.fontWeight = "bold"; ansList[ansId].style.color = "#51cb65"; ansList[ansId].children[1].style.fontWeight = "bold"; // ansList[ansId].children[0].children[0].checked = true; if (yourId != undefined) { ansList[yourId].style.color = "rgba(128, 128, 145,0.7)"; ansList[yourId].style.textDecoration = "line-through"; } } } } /** * 验证是否暂停中 * @returns Boolean */ function validatePause() { return ( document.getElementsByClassName("swal-button swal-button--confirm")[0] && document.getElementsByClassName("swal-button swal-button--confirm")[0].textContent == "继续做题" ); } // --------------------------------------------------- // 更新播放页面标题 function updateVideoTitle() { const config = { attributes: true }; const callback = function (mutationsList, observer) { for (let mutation of mutationsList) { if (mutation.type === "attributes" && mutation.attributeName === "class") { let title = ""; let titleEle = document.querySelector("a.log.pointer.video-player.act"); if (titleEle) { title = titleEle.textContent.trim(); } let cover = document.getElementById("videoCoverTop"); if (cover) { cover.innerHTML = `${title} 剩余课时:${getRemainingClass()}`; } } } }; const observer = new MutationObserver(callback); document.querySelectorAll("a.log.pointer.video-player").forEach(element => { observer.observe(element, config); }); } // 获取剩余课时数量 function getRemainingClass() { let classList = document.querySelectorAll("a.log.pointer.video-player"); let activeClass = document.querySelector("a.log.pointer.video-player.act").textContent.trim(); let index = 0; let flag = false; for (let i = 0; i < classList.length; i++) { const className = classList[i].textContent.trim(); if (flag) { index++; } if (activeClass == className) { flag = true; } } return index; } // 添加剩余时间 function addRemainingTime() { document.querySelector(".pv-time-current").addEventListener( "DOMSubtreeModified", function () { let remainingSeconds = getRemainingSeconds(); let remainingTime = remainingSeconds > 0 ? formatSeconds(remainingSeconds) : ""; let realRemainingSeconds = ( new Number(remainingSeconds) / new Number(getCurrentRate()) ).toFixed(0); let realRemainingTime = formatSeconds(realRemainingSeconds); let overTime = getOverTime(realRemainingSeconds); let currentEle = document.querySelector(".pv-time-current"); if (currentEle) { let parent = currentEle.parentElement; let remainingTimeSpan = document.querySelector(".pv-time-remaining.time-span"); if (!remainingTimeSpan) { remainingTimeSpan = document.createElement("span"); remainingTimeSpan.setAttribute("class", "pv-time-remaining time-span"); parent.append(remainingTimeSpan); } remainingTimeSpan.textContent = "剩余时间:" + remainingTime; let realRemainingTimeSpan = document.querySelector(".pv-time-remaining-real.time-span"); if (!realRemainingTimeSpan) { realRemainingTimeSpan = document.createElement("span"); realRemainingTimeSpan.setAttribute("class", "pv-time-remaining-real time-span"); parent.append(realRemainingTimeSpan); } realRemainingTimeSpan.textContent = "真实剩余时间:" + realRemainingTime; let overTimeSpan = document.querySelector(".pv-time-over.time-span"); if (!overTimeSpan) { overTimeSpan = document.createElement("span"); overTimeSpan.setAttribute("class", "pv-time-over time-span"); parent.append(overTimeSpan); } overTimeSpan.textContent = "结束时间:" + overTime; let nowTimeSpan = document.querySelector(".pv-time-now.time-span"); if (!nowTimeSpan) { nowTimeSpan = document.createElement("span"); nowTimeSpan.setAttribute("class", "pv-time-now time-span"); document.getElementById("videoCoverBottom").append(nowTimeSpan); } nowTimeSpan.textContent = "北京时间:" + dateFormat("HH:MM:SS", new Date()); } document .querySelector(".pv-video-wrap") .nextElementSibling.setAttribute( "class", "pv-skin-blue pv-video-bottom pv-subtitle-hide pv-show-fullscreen-page pv-base-control pv-first-h pv-first-hh" ); }, false ); } // 获取当前时间 function getNowSeconds() { let nowSeconds = 0; let currentEle = document.querySelector(".pv-time-current"); if (!currentEle) { return nowSeconds; } let nowTime = currentEle.textContent; let nowArr = nowTime.split(":"); if (nowArr.length == 2) { nowSeconds = parseInt(nowArr[0]) * 60 + parseInt(nowArr[1]); } else if (nowArr.length == 3) { nowSeconds = parseInt(nowArr[0]) * 60 * 60 + parseInt(nowArr[1]) * 60 + parseInt(nowArr[2]); } return nowSeconds; } // 获取总时长 function getAllSeconds() { let allSeconds = 0; let durationEle = document.querySelector(".pv-time-duration"); if (!durationEle) { return allSeconds; } let allTime = durationEle.textContent; let allArr = allTime.split(":"); if (allArr.length == 2) { allSeconds = parseInt(allArr[0]) * 60 + parseInt(allArr[1]); } else if (allArr.length == 3) { allSeconds = parseInt(allArr[0] * 60 * 60) + parseInt(allArr[1]) * 60 + parseInt(allArr[2]); } return allSeconds; } // 获取剩余时间 function getRemainingSeconds() { let allSeconds = getAllSeconds(); let nowSeconds = getNowSeconds(); return allSeconds - nowSeconds; } // 获取结束时间 function getOverTime(seconds) { let timestamp = new Date().getTime() + seconds * 1000; return dateFormat("HH:MM:SS", new Date(timestamp)); } // 窗口滚动到底部 function scrollToBottom() { setTimeout("window.scrollTo(0, document.body.scrollHeight)", 400); setTimeout("window.scrollTo(0, document.body.scrollHeight)", 800); } // 元素滚动到底部 function scrollElementToBottom(element) { element.scrollTop = element.scrollHeight - element.clientHeight; } // 将秒格式化为时间格式 function formatSeconds(value) { let result = parseInt(value); let h = Math.floor(result / 3600) < 10 ? "0" + Math.floor(result / 3600) : Math.floor(result / 3600); let m = Math.floor((result / 60) % 60) < 10 ? "0" + Math.floor((result / 60) % 60) : Math.floor((result / 60) % 60); let s = Math.floor(result % 60) < 10 ? "0" + Math.floor(result % 60) : Math.floor(result % 60); let res = ""; if (h !== "00") res += `${h}:`; if (m !== "00") res += `${m}:`; res += `${s}`; return res; } /** * Format date. * @param fmt format standard. * @param date date. * @returns {Time formatted string} */ function dateFormat(fmt, date) { let ret; let opt = { "Y+": date.getFullYear().toString(), "m+": (date.getMonth() + 1).toString(), "d+": date.getDate().toString(), "H+": date.getHours().toString(), "M+": date.getMinutes().toString(), "S+": date.getSeconds().toString(), }; for (let k in opt) { ret = new RegExp("(" + k + ")").exec(fmt); if (ret) { fmt = fmt.replace( ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, "0") ); } } return fmt; } /** * Log the title and version at the front of the console. * @param {String} title title. * @param {String} version script version. */ function logInfo(title, version) { console.clear(); const titleStyle = "color:white;background-color:#606060"; const versionStyle = "color:white;background-color:#1475b2"; const logTitle = " " + title + " "; const logVersion = " " + version + " "; console.log("%c" + logTitle + "%c" + logVersion, titleStyle, versionStyle); } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址