PageSourceSearch

https://pinglun.fx678.com/Home/js/jquery.lazyload.js

js fx678.com collected 2026-09-24 17:45:28 UTC 5,958 bytes, 155 lines download raw bytes

1/*
2 * Lazy Load - jQuery plugin for lazy loading images
3 *
4 * Copyright (c) 2007-2011 Mika Tuupola
5 *
6 * Licensed under the MIT license:
7 *   http://www.opensource.org/licenses/mit-license.php
8 *
9 * Project home:
10 *   http://www.appelsiini.net/projects/lazyload
11 *
12 * Version:  1.7.0-dev
13 *
14 */
15(function($) {
16    $.fn.lazyload = function(options) {
17        var settings = {
18            threshold       : 0,
19            failure_limit   : 0,
20            event           : "scroll",
21            effect          : "show",
22            container       : window,
23            skip_invisible  : true
24        };
25
26        if(options) {
27            /* Maintain BC for a couple of version. */
28            if (null !== options.failurelimit) {
29                options.failure_limit = options.failurelimit;
30                delete options.failurelimit;
31            }
32
33            $.extend(settings, options);
34        }
35
36        /* Fire one scroll event per scroll. Not one scroll event per image. */
37        var elements = this;
38        if (0 == settings.event.indexOf("scroll")) {
39            $(settings.container).bind(settings.event, function(event) {
40                var counter = 0;
41                elements.each(function() {
42                    if (settings.skip_invisible && !$(this).is(":visible")) return;
43                    if ($.abovethetop(this, settings) ||
44                        $.leftofbegin(this, settings)) {
45                        /* Nothing. */
46                    } else if (!$.belowthefold(this, settings) &&
47                        !$.rightoffold(this, settings)) {
48                        $(this).trigger("appear");
49                    } else {
50                        if (++counter > settings.failure_limit) {
51                            return false;
52                        }
53                    }
54                });
55
56                /* Remove image from array so it is not looped next time. */
57                var temp = $.grep(elements, function(element) {
58                    return !element.loaded;
59                });
60                elements = $(temp);
61
62            });
63        }
64
65        this.each(function() {
66            var self = this;
67            self.loaded = false;
68
69            /* When appear is triggered load original image. */
70            $(self).one("appear", function() {
71                if (!this.loaded) {
72                    $("<img />")
73                        .bind("load", function() {
74                            $(self)
75                                .hide()
76                                .attr("src", $(self).data("original"))
77                                [settings.effect](settings.effectspeed);
78                            self.loaded = true;
79                        })
80                        .attr("src", $(self).data("original"));
81                };
82            });
83
84            /* When wanted event is triggered load original image */
85            /* by triggering appear.                              */
86            if (0 != settings.event.indexOf("scroll")) {
87                $(self).bind(settings.event, function(event) {
88                    if (!self.loaded) {
89                        $(self).trigger("appear");
90                    }
91                });
92            }
93        });
94
95        /* Check if something appears when window is resized. */
96        $(window).bind("resize", function(event) {
97            $(settings.container).trigger(settings.event);
98        });
99
100        /* Force initial check if images should appear. */
101        $(settings.container).trigger(settings.event);
102
103        return this;
104
105    };
106
107    /* Convenience methods in jQuery namespace.           */
108    /* Use as  $.belowthefold(element, {threshold : 100, container : window}) */
109
110    $.belowthefold = function(element, settings) {
111        if (settings.container === undefined || settings.container === window) {
112            var fold = $(window).height() + $(window).scrollTop();
113        } else {
114            var fold = $(settings.container).offset().top + $(settings.container).height();
115        }
116        return fold <= $(element).offset().top - settings.threshold;
117    };
118
119    $.rightoffold = function(element, settings) {
120        if (settings.container === undefined || settings.container === window) {
121            var fold = $(window).width() + $(window).scrollLeft();
122        } else {
123            var fold = $(settings.container).offset().left + $(settings.container).width();
124        }
125        return fold <= $(element).offset().left - settings.threshold;
126    };
127
128    $.abovethetop = function(element, settings) {
129        if (settings.container === undefined || settings.container === window) {
130            var fold = $(window).scrollTop();
131        } else {
132            var fold = $(settings.container).offset().top;
133        }
134        return fold >= $(element).offset().top + settings.threshold  + $(element).height();
135    };
136
137    $.leftofbegin = function(element, settings) {
138        if (settings.container === undefined || settings.container === window) {
139            var fold = $(window).scrollLeft();
140        } else {
141            var fold = $(settings.container).offset().left;
142        }
143        return fold >= $(element).offset().left + settings.threshold + $(element).width();
144    };
145    /* Custom selectors for your convenience.   */
146    /* Use as $("img:below-the-fold").something() */
147
148    $.extend($.expr[':'], {
149        "below-the-fold" : function(a) { return $.belowthefold(a, {threshold : 0, container: window}
149) },
150        "above-the-fold" : function(a) { return !$.belowthefold(a, {threshold : 0, container: window}) },
151        "right-of-fold"  : function(a) { return $.rightoffold(a, {threshold : 0, container: window}) },
152        "left-of-fold"   : function(a) { return !$.rightoffold(a, {threshold : 0, container: window}) }
153    });
154
155})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.