您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
14/02/2025, 4:56:16 pm
当前为
- // ==UserScript==
- // @name hacker news - scroll to next most outer post
- // @namespace Violentmonkey Scripts
- // @match https://news.ycombinator.com/item*
- // @grant none
- // @version 1.0
- // @license MIT
- // @author -
- // @require https://cdn.jsdelivr.net/npm/@violentmonkey/shortcut@1
- // @description 14/02/2025, 4:56:16 pm
- // ==/UserScript==
- const { register } = VM.shortcut;
- const viewportHeight = window.innerHeight
- const outerMostCommentElements = Array.from(document.querySelectorAll(".comment-tree>tbody>tr:has(td[indent='0'])"))
- VM.shortcut.register('n', () => {
- if(document.activeElement.type === 'textarea'){
- // Is this hackey? maybe.
- document.activeElement.value+="n"
- return
- }
- const scrollY = window.scrollY || window.pageYOffset;
- const buffer = 50; // Buffer for invisible padding
- // Find the next element below viewport
- const nextElement = outerMostCommentElements.find(elem => {
- const elemTop = elem.getBoundingClientRect().top;
- return elemTop >= (viewportHeight - buffer);
- });
- if (nextElement) {
- nextElement.scrollIntoView({ behavior: "smooth", block: "center" });
- }
- // else {
- // // If no next element found, scroll to the last element
- // const lastElement = outerMostCommentElements[outerMostCommentElements.length - 1];
- // if (lastElement && lastElement.getBoundingClientRect().top < (viewportHeight - buffer)) {
- // lastElement.scrollIntoView({ behavior: "smooth", block: "center" });
- // }
- // }
- // for (const elem of outerMostCommentElements){
- // const elemYPosition = elem.getBoundingClientRect().top
- // // -50 to give it a bit of a buffer as there is invisible padding and stuff.
- // const elemIsBelowBottomViewport = elemYPosition >= (document.body.scrollTop + (viewportHeight - 50))
- // console.log(elemIsBelowBottomViewport)
- // console.log(elem.getAttribute("id"))
- // if(elemIsBelowBottomViewport){
- // elem.scrollIntoView({behavior:"smooth", block:"center"})
- // break
- // }
- // }
- });