Greasy Fork is available in English.

ImageReady【这是库,不要安装,不起作用】

图片加载完之前获取大小

Script này sẽ không được không được cài đặt trực tiếp. Nó là một thư viện cho các script khác để bao gồm các chỉ thị meta // @require https://update.greasyfork.org/scripts/429137/961631/ImageReady%E3%80%90%E8%BF%99%E6%98%AF%E5%BA%93%EF%BC%8C%E4%B8%8D%E8%A6%81%E5%AE%89%E8%A3%85%EF%BC%8C%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%E3%80%91.js

// ==UserScript==
// @name  ImageReady【这是库,不要安装,不起作用】
// @namespace   Violentmonkey Scripts
// @match       *
// @grant        none
// @version     2021.07.09
// @author      
// @description  图片加载完之前获取大小
// ==/UserScript==

var imgReady = (function () {
	var list = [], intervalId = null,
	// 用来执行队列
	tick = function () {
		var i = 0;
		for (; i < list.length; i++) {
			list[i].end ? list.splice(i--, 1) : list[i]();
		};
		!list.length && stop();
	},
	// 停止所有定时器队列
	stop = function () {
		clearInterval(intervalId);
		intervalId = null;
	};
	return function (url, ready, load, error) {
		var onready, width, height, newWidth, newHeight,
		img = new Image();
		img.src = url;
		// 如果图片被缓存,则直接返回缓存数据
		if (img.complete) {
			ready.call(img);
			load && load.call(img);
			return;
		};
		width = img.width;
		height = img.height;
		// 加载错误后的事件
		img.onerror = function () {
			error && error.call(img);
			onready.end = true;
			img = img.onload = img.onerror = null;
		};
		// 图片尺寸就绪
		onready = function () {
			newWidth = img.width;
			newHeight = img.height;
			if (newWidth !== width || newHeight !== height || newWidth * newHeight > 1024) {
				ready.call(img);
				onready.end = true;
			};
		};
		onready();
		// 完全加载完毕的事件
		img.onload = function () {
			// onload在定时器时间差范围内可能比onready快
			// 这里进行检查并保证onready优先执行
			!onready.end && onready();
			load && load.call(img);
			// IE gif动画会循环执行onload,置空onload即可
			img = img.onload = img.onerror = null;
		};
		// 加入队列中定期执行
		if (!onready.end) {
			list.push(onready);
			// 无论何时只允许出现一个定时器,减少浏览器性能损耗
			if (intervalId === null) intervalId = setInterval(tick, 40);
		};
	};
})();