PluginProbe
Cooked – Recipe Management / 1.9.1
Cooked – Recipe Management v1.9.1
1.16.1 1.16.0 1.15.0 trunk 1.10.0 1.11.0 1.11.1 1.11.2 1.11.3 1.11.4 1.12.0 1.13.0 1.14.0 1.7.10 1.7.11 1.7.12 1.7.13 1.7.15.1 1.7.15.3 1.7.15.4 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 All 37 releases
cooked / assets / js / appear / jquery.appear.js

jquery.appear.js in Cooked – Recipe Management 1.9.1, at assets/js/appear/jquery.appear.js

117 lines 2.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /*
2 * jQuery appear plugin
3 *
4 * Copyright (c) 2012 Andrey Sidorov
5 * licensed under MIT license.
6 *
7 * https://github.com/morr/jquery.appear/
8 *
9 * Version: 0.3.6
10 */
11 (function($) {
12 var selectors = [];
13
14 var check_binded = false;
15 var check_lock = false;
16 var defaults = {
17 interval: 250,
18 force_process: false
19 };
20 var $window = $(window);
21
22 var $prior_appeared = [];
23
24 function appeared(selector) {
25 return $(selector).filter(function() {
26 return $(this).is(':appeared');
27 });
28 }
29
30 function process() {
31 check_lock = false;
32 for (var index = 0, selectorsLength = selectors.length; index < selectorsLength; index++) {
33 var $appeared = appeared(selectors[index]);
34
35 $appeared.trigger('appear', [$appeared]);
36
37 if ($prior_appeared[index]) {
38 var $disappeared = $prior_appeared[index].not($appeared);
39 $disappeared.trigger('disappear', [$disappeared]);
40 }
41 $prior_appeared[index] = $appeared;
42 }
43 }
44
45 function add_selector(selector) {
46 selectors.push(selector);
47 $prior_appeared.push();
48 }
49
50 // "appeared" custom filter
51 $.expr[':'].appeared = function(element) {
52 var $element = $(element);
53 if (!$element.is(':visible')) {
54 return false;
55 }
56
57 var window_left = $window.scrollLeft();
58 var window_top = $window.scrollTop();
59 var offset = $element.offset();
60 var left = offset.left;
61 var top = offset.top;
62
63 if (top + $element.height() >= window_top &&
64 top - ($element.data('appear-top-offset') || 0) <= window_top + $window.height() &&
65 left + $element.width() >= window_left &&
66 left - ($element.data('appear-left-offset') || 0) <= window_left + $window.width()) {
67 return true;
68 } else {
69 return false;
70 }
71 };
72
73 $.fn.extend({
74 // watching for element's appearance in browser viewport
75 appear: function(options) {
76 var opts = $.extend({}, defaults, options || {});
77 var selector = this.selector || this;
78 if (!check_binded) {
79 var on_check = function() {
80 if (check_lock) {
81 return;
82 }
83 check_lock = true;
84
85 setTimeout(process, opts.interval);
86 };
87
88 $(window).scroll(on_check).resize(on_check);
89 check_binded = true;
90 }
91
92 if (opts.force_process) {
93 setTimeout(process, opts.interval);
94 }
95 add_selector(selector);
96 return $(selector);
97 }
98 });
99
100 $.extend({
101 // force elements's appearance check
102 force_appear: function() {
103 if (check_binded) {
104 process();
105 return true;
106 }
107 return false;
108 }
109 });
110 })(function() {
111 if (typeof module !== 'undefined') {
112 // Node
113 return require('jquery');
114 } else {
115 return jQuery;
116 }
117 }());