PageSourceSearch

https://ampboards.com/marketing/assets/js/appear.js?ver=6.4.5

js ampboards.com collected 2026-10-06 13:04:42 UTC 3,346 bytes, 120 lines download raw bytes

1(function($) {
2    var selectors = [];
3
4    var checkBinded = false;
5    var checkLock = false;
6    var defaults = {
7        interval: 250,
8        force_process: false
9    };
10    var $window = $(window);
11
12    var $priorAppeared = [];
13
14    function isAppeared() {
15        return $(this).is(':appeared');
16    }
17
18    function isNotTriggered() {
19        return !$(this).data('_appear_triggered');
20    }
21
22    function process() {
23        checkLock = false;
24
25        for (var index = 0, selectorsLength = selectors.length; index < selectorsLength; index++) {
26            var $appeared = $(selectors[index]).filter(isAppeared);
27
28            $appeared
29                .filter(isNotTriggered)
30                .data('_appear_triggered', true)
31                .trigger('appear', [$appeared]);
32
33            if ($priorAppeared[index]) {
34                var $disappeared = $priorAppeared[index].not($appeared);
35                $disappeared
36                    .data('_appear_triggered', false)
37                    .trigger('disappear', [$disappeared]);
38            }
39            $priorAppeared[index] = $appeared;
40        }
41    }
42
43    function addSelector(selector) {
44        selectors.push(selector);
45        $priorAppeared.push();
46    }
47
48    // ":appeared" custom filter
49    $.expr.pseudos.appeared = $.expr.createPseudo(function(_arg) {
50        return function(element) {
51            var $element = $(element);
52
53            if (!$element.is(':visible')) {
54                return false;
55            }
56
57            var windowLeft = $window.scrollLeft();
58            var windowTop = $window.scrollTop();
59            var offset = $element.offset();
60            var left = offset.left;
61            var top = offset.top;
62
63            if (top + $element.height() >= windowTop &&
64                top - ($element.data('appear-top-offset') || 0) <= windowTop + $window.height() &&
65                left + $element.width() >= windowLeft &&
66                left - ($element.data('appear-left-offset') || 0) <= windowLeft + $window.width()) {
67                return true;
68            }
69            return false;
70        };
71    });
72
73    $.fn.extend({
74        // watching for element's appearance in browser viewport
75        appear: function(selector, options) {
76            $.appear(this, options);
77            return this;
78        }
79    });
80
81    $.extend({
82        appear: function(selector, options) {
83            var opts = $.extend({}, defaults, options || {});
84
85            if (!checkBinded) {
86                var onCheck = function() {
87                    if (checkLock) {
88                        return;
89                    }
90                    checkLock = true;
91
92                    setTimeout(process, opts.interval);
93                };
94
95                $(window).scroll(onCheck).resize(onCheck);
96                checkBinded = true;
97            }
98
99            if (opts.force_process) {
100                setTimeout(process, opts.interval);
101            }
102
103            addSelector(selector);
104        },
105        // force elements's appearance check
106        force_appear: function() {
107            if (checkBinded) {
108                process();
109                return true;
110            }
111            return false;
112        }
113    });
114}(function() {
115    if (typeof module !== 'undefined') {
116        // Node
117        return require('jquery');
118    }
119    return jQuery;
120}()));

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.