您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Enable nico seiga infinite scrolling
// ==UserScript== // @name Nico Seiga infinite srolling // @namespace https://greasyfork.org/zh-CN/scripts/43940 // @version 2022.3.13 // @description Enable nico seiga infinite scrolling // @author ctrn43062 // @match https://seiga.nicovideo.jp/tag/* // @match https://seiga.nicovideo.jp/user/illust/* // @icon https://www.google.com/s2/favicons?domain=nicovideo.jp // @grant none // @license MIT // @note 2022.3.13 添加 illust 页支持 // ==/UserScript== const url = new URL(location.href); const baseURL = url.origin + url.pathname; const scrollBuffer = 600; let currentPage = parseInt(url.searchParams.get('page')) || 1; let loadingNextPage = false; function getScrollHeight() { const scrollTop = document.documentElement.scrollTop === 0 ? document.body.scrollTop : document.documentElement.scrollTop; const scrollHeight = document.documentElement.scrollTop === 0 ? document.body.scrollHeight : document.documentElement.scrollHeight; const innerHeight = window.innerHeight; return { scrollTop: scrollTop, scrollHeight: scrollHeight, innerHeight: innerHeight }; } function getPage(page = 1) { currentPage += page; url.searchParams.set('page', currentPage); return fetch(url).then(resp => resp.text()); } function createLoadingTip(tip = '') { const loadingTip = document.createElement('center'); const illust_list = document.querySelector('.illust_list') loadingTip.style.margin = '30px 0'; loadingTip.style.color = '#888'; loadingTip.style.fontSize = '0.85rem'; loadingTip.style.fontWeight = 'bold'; loadingTip.style.clear = 'both'; loadingTip.style.opacity = '0'; illust_list.appendChild(loadingTip); return { show: () => { // 加载下一页数据的提示文本 loadingTip.textContent = tip || `Loading Page ${currentPage + 1}` loadingTip.style.opacity = '1'; }, hide: () => { loadingTip.style.opacity = '0'; } }; } (function() { const loadingTip = createLoadingTip(); window.addEventListener('scroll', () => { const scroll = getScrollHeight(); const scrollTop = scroll['scrollTop'], scrollHeight = scroll['scrollHeight'], innerHeight = scroll['innerHeight']; if (scrollTop + innerHeight >= scrollHeight - scrollBuffer && !loadingNextPage) { loadingNextPage = true; loadingTip.show(); getPage().then(html => { history.replaceState({}, '', url); const dummyHTML = document.createElement('html'); dummyHTML.innerHTML = html; const items = dummyHTML.querySelectorAll('.item_list .list_item'); const newControll = dummyHTML.querySelector('.controll'); // no more data if(!items.length) { loadingTip.hide(); return ; } document.querySelectorAll('.controll').forEach(controll => { controll.innerHTML = newControll.innerHTML; }) const itemList = document.querySelector('.item_list'); itemList.append.apply(itemList, items); loadingTip.hide(); loadingNextPage = false; }) } }, false); })();