🏠 Home 

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

图片加载完之前获取大小

สคริปต์นี้ไม่ควรถูกติดตั้งโดยตรง มันเป็นคลังสำหรับสคริปต์อื่น ๆ เพื่อบรรจุด้วยคำสั่งเมทา // @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

  1. // ==UserScript==
  2. // @name ImageReady【这是库,不要安装,不起作用】
  3. // @namespace Violentmonkey Scripts
  4. // @match *
  5. // @grant none
  6. // @version 2021.07.09
  7. // @author
  8. // @description 图片加载完之前获取大小
  9. // ==/UserScript==
  10. var imgReady = (function () {
  11. var list = [], intervalId = null,
  12. // 用来执行队列
  13. tick = function () {
  14. var i = 0;
  15. for (; i < list.length; i++) {
  16. list[i].end ? list.splice(i--, 1) : list[i]();
  17. };
  18. !list.length && stop();
  19. },
  20. // 停止所有定时器队列
  21. stop = function () {
  22. clearInterval(intervalId);
  23. intervalId = null;
  24. };
  25. return function (url, ready, load, error) {
  26. var onready, width, height, newWidth, newHeight,
  27. img = new Image();
  28. img.src = url;
  29. // 如果图片被缓存,则直接返回缓存数据
  30. if (img.complete) {
  31. ready.call(img);
  32. load && load.call(img);
  33. return;
  34. };
  35. width = img.width;
  36. height = img.height;
  37. // 加载错误后的事件
  38. img.onerror = function () {
  39. error && error.call(img);
  40. onready.end = true;
  41. img = img.onload = img.onerror = null;
  42. };
  43. // 图片尺寸就绪
  44. onready = function () {
  45. newWidth = img.width;
  46. newHeight = img.height;
  47. if (newWidth !== width || newHeight !== height || newWidth * newHeight > ####) {
  48. ready.call(img);
  49. onready.end = true;
  50. };
  51. };
  52. onready();
  53. // 完全加载完毕的事件
  54. img.onload = function () {
  55. // onload在定时器时间差范围内可能比onready快
  56. // 这里进行检查并保证onready优先执行
  57. !onready.end && onready();
  58. load && load.call(img);
  59. // IE gif动画会循环执行onload,置空onload即可
  60. img = img.onload = img.onerror = null;
  61. };
  62. // 加入队列中定期执行
  63. if (!onready.end) {
  64. list.push(onready);
  65. // 无论何时只允许出现一个定时器,减少浏览器性能损耗
  66. if (intervalId === null) intervalId = setInterval(tick, 40);
  67. };
  68. };
  69. })();