您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Infinite scroll @ javbus.com
当前为
// ==UserScript== // @name javbus.waterfall // @description Infinite scroll @ javbus.com // @namespace https://github.com/FlandreDaisuki // @include https://www.javbus.com/* // @version 2016.12.06 // @grant none // ==/UserScript== class Lock { constructor(d = false) { this.locked = d; } lock() { this.locked = true; } unlock() { this.locked = false; } } function addStyle(styleStr) { $('head').append(`<style>${styleStr}</style>`); } function fetchURL(url) { console.log(`fetchUrl = ${url}`); return fetch(url, { credentials: 'same-origin' }) .then((response) => { return response.text(); }) .then((html) => { return new DOMParser().parseFromString(html, 'text/html'); }) .then((doc) => { let $doc = $(doc); let nextURL = `${location.protocol}//${location.host}${$doc.find('a#next').attr('href')}`; let elems = $doc.find('div.item'); return { nextURL, elems }; }); } function* fetchSync(urli) { let url = urli; do { yield new Promise((resolve, reject) => { if (mutex.locked) { reject(); } else { mutex.lock(); resolve(); } }).then(() => { return fetchURL(url).then(info => { url = info.nextURL; return info.elems; }); }).then(elems => { mutex.unlock(); return elems; }).catch((err) => { // Locked! }); } while (url); } function appendElems(arg) { let nextpage = pagegen.next(); if (!nextpage.done) { nextpage.value.then(elems => { /* show .avatar-box only in first page */ $('#waterfall').append((!arg) ? elems.slice(1) : elems); }); } return nextpage.done; } function xbottom(elem, limit) { return (elem.getBoundingClientRect().top - $(window).height()) < limit; } function end() { console.info('The End'); $(document).off('scroll'); $(document).off('wheel'); } function scroll() { if (xbottom(anchor, 500) && appendElems()) { end(); } } function wheel() { if (xbottom(anchor, 1000) && appendElems()) { end(); } } const pagegen = fetchSync(location.href); const anchor = $('.pagination')[0]; const mutex = new Lock(); if ($('div.item').length) { $(document).on('scroll', scroll); $(document).on('wheel', wheel); $('div.item').remove(); appendElems('first'); addStyle(` #waterfall { height: initial !important; width: initial !important; display: flex; flex-direction: row; flex-wrap: wrap; } #waterfall .item.item { position: relative !important; top: initial !important; left: initial !important; float: none; flex: 25%; } #waterfall .movie-box, #waterfall .avatar-box { width: initial !important; display: flex; } #waterfall .movie-box .photo-frame { overflow: visible; }`); }