PluginProbe
Borderless – Addons and Templates for Elementor / 1.6.1
Borderless – Addons and Templates for Elementor v1.6.1
trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.2.1 1.2.2 1.2.3 All 78 releases
borderless / assets / lib / appear.js

appear.js in Borderless – Addons and Templates for Elementor 1.6.1, at assets/lib/appear.js

152 lines 3.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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);
152