PageSourceSearch

https://ed-data.org/lib/jquery/plugins/jquery-appear/jquery.appear…RvsiNbz4QIapuTmuUJ7KzAG7McaLqU5kc-Mdit6-w-s

js ed-data.org collected 2026-09-24 21:11:16 UTC 4,379 bytes, 151 lines download raw bytes

1/*
2 * jQuery.appear
3 * https://github.com/bas2k/jquery.appear/
4 * http://code.google.com/p/jquery-appear/
5 * http://bas2k.ru/
6 *
7 * Copyright (c) 2009 Michael Hixson
8 * Copyright (c) 2012-2014 Alexander Brovikov
9 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
10 */
11(function($) {
12    $.fn.appear = function(fn, options) {
13
14        var settings = $.extend({
15
16            //arbitrary data to pass to fn
17            data: undefined,
18
19            //call fn only on the first appear?
20            one: true,
21
22            // X & Y accuracy
23            accX: 0,
24            accY: 0
25
26        }, options);
27
28        return this.each(function() {
29
30            var t = $(this);
31
32            //whether the element is currently visible
33            t.appeared = false;
34
35            if (!fn) {
36
37                //trigger the custom event
38                t.trigger('appear', settings.data);
39                return;
40            }
41
42            var w = $(window);
43
44            //fires the appear event when appropriate
45            var check = function() {
46
47                //is the element hidden?
48                if (!t.is(':visible')) {
49
50                    //it became hidden
51                    t.appeared = false;
52                    return;
53                }
54
55                //is the element inside the visible window?
56                var a = w.scrollLeft();
57                var b = w.scrollTop();
58                var o = t.offset();
59                var x = o.left;
60                var y = o.top;
61
62                var ax = settings.accX;
63                var ay = settings.accY;
64                var th = t.height();
65                var wh = w.height();
66                var tw = t.width();
67                var ww = w.width();
68
69                if (y + th + ay >= b &&
70                    y <= b + wh + ay &&
71                    x + tw + ax >= a &&
72                    x <= a + ww + ax) {
73
74                    //trigger the custom event
75                    if (!t.appeared) t.trigger('appear', settings.data);
76
77                } else {
78
79                    //it scrolled out of view
80                    t.appeared = false;
81                }
82            };
83
84            //create a modified fn with some additional logic
85            var modifiedFn = function() {
86
87                //mark the element as visible
88                t.appeared = true;
89
90                //is this supposed to happen only once?
91                if (settings.one) {
92
93                    //remove the check
94                    w.unbind('scroll', check);
95                    var i = $.inArray(check, $.fn.appear.checks);
96                    if (i >= 0) $.fn.appear.checks.splice(i, 1);
97                }
98
99                //trigger the original fn
100                fn.apply(this, arguments);
101            };
102
103            //bind the modified fn to the element
104            if (settings.one) t.one('appear', settings.data, modifiedFn);
105            else t.bind('appear', settings.data, modifiedFn);
106
107            //check whenever the window scrolls
108            w.scroll(check);
109
110            //check whenever the dom changes
111            $.fn.appear.checks.push(check);
112
113            //check now
114            (check)();
115        });
116    };
117
118    //keep a queue of appearance checks
119    $.extend($.fn.appear, {
120
121        checks: [],
122        timeout: null,
123
124        //process the queue
125        checkAll: function() {
126            var length = $.fn.appear.checks.length;
127            if (length > 0) while (length--) ($.fn.appear.checks[length])();
128        },
129
130        //check the queue asynchronously
131        run: function() {
132            if ($.fn.appear.timeout) clearTimeout($.fn.appear.timeout);
133            $.fn.appear.timeout = setTimeout($.fn.appear.checkAll, 20);
134        }
135    });
136
137    //run checks when these methods are called
138    $.each(['append', 'prepend', 'after', 'before', 'attr',
139        'removeAttr', 'addClass', 'removeClass', 'toggleClass',
140        'remove', 'css', 'show', 'hide'], function(i, n) {
141        var old = $.fn[n];
142        if (old) {
143            $.fn[n] = function() {
144                var r = old.apply(this, arguments);
145                $.fn.appear.run();
146                return r;
147            }
148        }
149    });
150
151})(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.