您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Apply lazy loading to all images.
- // ==UserScript==
- // @name Lazy Load Image
- // @namespace lazy-load-image
- // @version 2025-01-06
- // @description Apply lazy loading to all images.
- // @author Ace
- // @run-at document-end
- // @match *://*/*
- // @icon https://cdn-icons-png.flaticon.com/512/13159/13159509.png
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- // Debug mode: Set to true to enable logs
- const DEBUG = false;
- // Debug logging function
- const log = (...args) => {
- if (DEBUG) {
- console.log('[LazyLoadImage]', ...args);
- }
- };
- log('Script started');
- // Process existing images
- document.querySelectorAll('img').forEach(img => {
- if (!img.loading || img.loading !== 'lazy') {
- img.loading = 'lazy';
- log('Processed existing img:', img.src);
- }
- });
- // Debouncing logic with requestAnimationFrame
- let imgQueue = [];
- let isScheduled = false;
- const processQueue = () => {
- log('Processing queued images:', imgQueue.length);
- imgQueue.forEach(img => {
- if (!img.loading || img.loading !== 'lazy') {
- img.loading = 'lazy'; // Apply lazy loading
- log('Applied lazy loading to new img:', img.src);
- }
- });
- imgQueue = []; // Clear the queue
- isScheduled = false; // Allow new frame scheduling
- };
- // Observe dynamically added images
- const observer = new MutationObserver(mutations => {
- mutations.forEach(mutation => {
- mutation.addedNodes.forEach(node => {
- if (node.nodeType === 1 && node.tagName === 'IMG') {
- imgQueue.push(node); // Add image to the queue
- log('New img detected:', node.src || 'No src');
- }
- });
- });
- // Schedule processing for the next frame if not already scheduled
- if (!isScheduled && imgQueue.length > 0) {
- isScheduled = true;
- requestAnimationFrame(processQueue);
- log('Scheduled processing for next frame');
- }
- });
- // Start observing the DOM
- observer.observe(document.body, { childList: true, subtree: true });
- log('MutationObserver started');
- })();