PageSourceSearch

https://www.ijvcanada.org/wp-content/plugins/keydesign-addon/assets/js/jquery.appear.js?ver=7.0.6

js ijvcanada.org collected 2026-09-24 08:56:10 UTC 3,155 bytes, 115 lines download raw bytes

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