<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.yzwiki.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-jQueryLazyload.js</id>
	<title>MediaWiki:Gadget-jQueryLazyload.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.yzwiki.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-jQueryLazyload.js"/>
	<link rel="alternate" type="text/html" href="https://www.yzwiki.com/w/index.php?title=MediaWiki:Gadget-jQueryLazyload.js&amp;action=history"/>
	<updated>2026-05-04T22:01:04Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.0</generator>
	<entry>
		<id>https://www.yzwiki.com/w/index.php?title=MediaWiki:Gadget-jQueryLazyload.js&amp;diff=114&amp;oldid=prev</id>
		<title>LovelyA72: Created page with &quot;/**  * @source https://github.com/tuupola/lazyload  * 更新后请同步更新上面链接到最新版本  */ /*!  * Lazy Load - JavaScript plugin for lazy loading images  *  * Copyright (c) 2007-2019 Mika Tuupola  *  * Licensed under the MIT license:  *   http://www.opensource.org/licenses/mit-license.php  *  * Project home:  *   https://appelsiini.net/projects/lazyload  *  * Version: 2.0.0-rc.2  *  */  &quot;use strict&quot;; (() =&gt; {     const defaults = {         src: &quot;data-sr...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.yzwiki.com/w/index.php?title=MediaWiki:Gadget-jQueryLazyload.js&amp;diff=114&amp;oldid=prev"/>
		<updated>2022-12-22T01:34:53Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;*  * @source https://github.com/tuupola/lazyload  * 更新后请同步更新上面链接到最新版本: &lt;/span&gt; &lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;!  * Lazy Load - JavaScript plugin for lazy loading images  *  * Copyright (c) 2007-2019 Mika Tuupola  *  * Licensed under the MIT license:  *   http://www.opensource.org/licenses/mit-license.php  *  * Project home:  *   https://appelsiini.net/projects/lazyload  *  * Version: 2.0.0-rc.2  *: &lt;/span&gt;  &amp;quot;use strict&amp;quot;; (() =&amp;gt; {     const defaults = {         src: &amp;quot;data-sr...&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * @source https://github.com/tuupola/lazyload&lt;br /&gt;
 * 更新后请同步更新上面链接到最新版本&lt;br /&gt;
 */&lt;br /&gt;
/*!&lt;br /&gt;
 * Lazy Load - JavaScript plugin for lazy loading images&lt;br /&gt;
 *&lt;br /&gt;
 * Copyright (c) 2007-2019 Mika Tuupola&lt;br /&gt;
 *&lt;br /&gt;
 * Licensed under the MIT license:&lt;br /&gt;
 *   http://www.opensource.org/licenses/mit-license.php&lt;br /&gt;
 *&lt;br /&gt;
 * Project home:&lt;br /&gt;
 *   https://appelsiini.net/projects/lazyload&lt;br /&gt;
 *&lt;br /&gt;
 * Version: 2.0.0-rc.2&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
(() =&amp;gt; {&lt;br /&gt;
    const defaults = {&lt;br /&gt;
        src: &amp;quot;data-src&amp;quot;,&lt;br /&gt;
        srcset: &amp;quot;data-srcset&amp;quot;,&lt;br /&gt;
        selector: &amp;quot;.lazyload&amp;quot;,&lt;br /&gt;
        root: null,&lt;br /&gt;
        rootMargin: &amp;quot;0px&amp;quot;,&lt;br /&gt;
        threshold: 0,&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
    * Merge two or more objects. Returns a new object.&lt;br /&gt;
    * @private&lt;br /&gt;
    * @param {Boolean}  deep     If true, do a deep (or recursive) merge [optional]&lt;br /&gt;
    * @param {Object}   objects  The objects to merge together&lt;br /&gt;
    * @returns {Object}          Merged values of defaults and options&lt;br /&gt;
    */&lt;br /&gt;
    const extend = function (_deep, ..._args) {&lt;br /&gt;
&lt;br /&gt;
        const extended = {};&lt;br /&gt;
        const deep = typeof _deep === &amp;quot;boolean&amp;quot; ? _deep : false;&lt;br /&gt;
        const args = [...typeof _deep !== &amp;quot;boolean&amp;quot; ? [_deep] : [], ..._args];&lt;br /&gt;
&lt;br /&gt;
        /* Merge the object into the extended object */&lt;br /&gt;
        const merge = function (obj) {&lt;br /&gt;
            for (const prop in obj) {&lt;br /&gt;
                if (Object.prototype.hasOwnProperty.bind(obj)(prop)) {&lt;br /&gt;
                    /* If deep merge and property is an object, merge properties */&lt;br /&gt;
                    if (deep &amp;amp;&amp;amp; Object.prototype.toString.bind(obj[prop])() === &amp;quot;[object Object]&amp;quot;) {&lt;br /&gt;
                        extended[prop] = extend(true, extended[prop], obj[prop]);&lt;br /&gt;
                    } else {&lt;br /&gt;
                        extended[prop] = obj[prop];&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        /* Loop through each object and conduct a merge */&lt;br /&gt;
        for (const obj of args) {&lt;br /&gt;
            merge(obj);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return extended;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    class LazyLoad {&lt;br /&gt;
        constructor(images, options) {&lt;br /&gt;
            this.settings = extend(defaults, options || {});&lt;br /&gt;
            this.images = images || document.querySelectorAll(this.settings.selector);&lt;br /&gt;
            this.observer = null;&lt;br /&gt;
            this.init();&lt;br /&gt;
        }&lt;br /&gt;
        init() {&lt;br /&gt;
&lt;br /&gt;
            /* Without observers load everything and bail out early. */&lt;br /&gt;
            if (!window.IntersectionObserver) {&lt;br /&gt;
                this.loadImages();&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            const self = this;&lt;br /&gt;
            const observerConfig = {&lt;br /&gt;
                root: this.settings.root,&lt;br /&gt;
                rootMargin: this.settings.rootMargin,&lt;br /&gt;
                threshold: [this.settings.threshold],&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            this.observer = new IntersectionObserver((entries) =&amp;gt; {&lt;br /&gt;
                Array.prototype.forEach.bind(entries)((entry) =&amp;gt; {&lt;br /&gt;
                    if (entry.isIntersecting) {&lt;br /&gt;
                        self.observer.unobserve(entry.target);&lt;br /&gt;
                        const src = entry.target.getAttribute(self.settings.src);&lt;br /&gt;
                        const srcset = entry.target.getAttribute(self.settings.srcset);&lt;br /&gt;
                        if (&amp;quot;img&amp;quot; === entry.target.tagName.toLowerCase()) {&lt;br /&gt;
                            if (src) {&lt;br /&gt;
                                entry.target.src = src;&lt;br /&gt;
                            }&lt;br /&gt;
                            if (srcset) {&lt;br /&gt;
                                entry.target.srcset = srcset;&lt;br /&gt;
                            }&lt;br /&gt;
                        } else {&lt;br /&gt;
                            entry.target.style.backgroundImage = `url(${src})`;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                });&lt;br /&gt;
            }, observerConfig);&lt;br /&gt;
&lt;br /&gt;
            Array.prototype.forEach.bind(this.images)((image) =&amp;gt; {&lt;br /&gt;
                self.observer.observe(image);&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        loadAndDestroy() {&lt;br /&gt;
            if (!this.settings) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            this.loadImages();&lt;br /&gt;
            this.destroy();&lt;br /&gt;
        }&lt;br /&gt;
        loadImages() {&lt;br /&gt;
            if (!this.settings) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            const self = this;&lt;br /&gt;
            Array.prototype.forEach.bind(this.images)((image) =&amp;gt; {&lt;br /&gt;
                const src = image.getAttribute(self.settings.src);&lt;br /&gt;
                const srcset = image.getAttribute(self.settings.srcset);&lt;br /&gt;
                if (&amp;quot;img&amp;quot; === image.tagName.toLowerCase()) {&lt;br /&gt;
                    if (src) {&lt;br /&gt;
                        image.src = src;&lt;br /&gt;
                    }&lt;br /&gt;
                    if (srcset) {&lt;br /&gt;
                        image.srcset = srcset;&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    image.style.backgroundImage = `url(&amp;#039;${src}&amp;#039;)`;&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        destroy() {&lt;br /&gt;
            if (!this.settings) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            this.observer.disconnect();&lt;br /&gt;
            this.settings = null;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    window.lazyload = function (images, options) {&lt;br /&gt;
        return new LazyLoad(images, options);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    if (window.jQuery) {&lt;br /&gt;
        jQuery.fn.lazyload = function (_options) {&lt;br /&gt;
            const options = _options || {};&lt;br /&gt;
            options.attribute ||= &amp;quot;data-src&amp;quot;;&lt;br /&gt;
            new LazyLoad(this.toArray(), options);&lt;br /&gt;
            return this;&lt;br /&gt;
        };&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;/div&gt;</summary>
		<author><name>LovelyA72</name></author>
	</entry>
</feed>