您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
非同步数组枚举回调
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/3588/10916/Interval%20Looper.js
// Interval Looper by Jixun: // https://gist.github.com/JixunMoe/c77bb3936a68997fce22 var IntervalLoop = function (arrData, looper, delay) { if (!(this instanceof IntervalLoop)) return new IntervalLoop (arrData, looper, delay); /** * Status * @type Number * 0: 循环未开始 * 1: 正在循环 * 2: 循环结束 */ this.status = 0; this.next = this._next.bind (this); this.index = 0; this.setDelay (delay || 50); this.data = (arrData instanceof Array) ? arrData : []; this.setLooper (looper); }; IntervalLoop.prototype = { _getDelay: function () { if (!this.delay) return 50; if (this.delay.apply) return this.delay(); return this.delay; }, _next: function () { // 状态改为 进行中 this.status = 1; if (this.index < this.data.length) { setTimeout (this.looper.bind(this, this.data[this.index]), this.delay); this.index ++; if (this.onProgress && this.onProgress.apply) { try { this.onProgress (this.index, this.data.length); } catch (e) { console.error ('Error while callback to `onProgress`'); console.error (e); } } } else { this.status = 2; if (this.onComplete && this.onComplete.apply) { try { this.onComplete (this.data.length); } catch (e) { console.error ('Error while callback to `onComplete`'); console.error (e); } } } }, cleanup: function () { if (this.status == 2) { // 已经用过的数据就清掉。 this.data.splice(0, this.index); this.index = 0; this.status = 0; } return this; }, add: function () { if (arguments.length > 0) { // 将所有参数作为数据推入 this.data for (var i = 0; i<arguments.length; i++) this.data.push (arguments[i]); // 整个组已经完结,清理后自动继续 if (this.status == 2) this.cleanup().next(); } // 连锁 return this; }, setDelay: function (newDelay) { if (newDelay) this.delay = parseInt (newDelay); return this; }, setLooper: function (fooCallback) { if (fooCallback && fooCallback.apply) this.looper = fooCallback.bind(this, this.next); return this; }, loop: function () { if (this.status == 0) // 尚未启动, 从头开始 this.next (); return this; } };