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 process() { 25 check_lock = false; 26 for (var index = 0, selectorsLength = selectors.length; index < selectorsLength; index++) { 27 var $appeared = $(selectors[index]).filter(function() { 28 return $(this).is(':appeared'); 29 }); 30 31 $appeared.trigger('wpr_appear', [$appeared]); 32 33 if ($prior_appeared[index]) { 34 var $disappeared = $prior_appeared[index].not($appeared); 35 $disappeared.trigger('wpr_disappear', [$disappeared]); 36 } 37 $prior_appeared[index] = $appeared; 38 } 39 }; 40 41 function add_selector(selector) { 42 selectors.push(selector); 43 $prior_appeared.push(); 44 } 45 46 // "appeared" custom filter 47 $.expr[':']['appeared'] = function(element) { 48 var $element = $(element); 49 if (!$element.is(':visible')) { 50 return false; 51 } 52 53 var window_left = $window.scrollLeft(); 54 var window_top = $window.scrollTop(); 55 var offset = $element.offset(); 56 var left = offset.left; 57 var top = offset.top; 58 59 if (top + $element.height() >= window_top && 60 top - ($element.data('appear-top-offset') || 0) <= window_top + $window.height() && 61 left + $element.width() >= window_left && 62 left - ($element.data('appear-left-offset') || 0) <= window_left + $window.width()) { 63 return true; 64 } else { 65 return false; 66 } 67 }; 68 69 $.fn.extend({ 70 // watching for element's appearance in browser viewport 71 wpr_appear: function(options) { 72 var opts = $.extend({}, defaults, options || {}); 73 var selector = this.selector || this; 74 if (!check_binded) { 75 var on_check = function() { 76 if (check_lock) { 77 return; 78 } 79 check_lock = true; 80 81 setTimeout(process, opts.interval); 82 }; 83 84 $(window).scroll(on_check).resize(on_check); 85 check_binded = true; 86 } 87 88 if (opts.force_process) { 89 setTimeout(process, opts.interval); 90 } 91 add_selector(selector); 92 return $(selector); 93 } 94 }); 95 96 $.extend({ 97 // force elements's appearance check 98 wpr_force_appear: function() { 99 if (check_binded) { 100 process(); 101 return true; 102 } 103 return false; 104 } 105 }); 106})(function() { 107 if (typeof module !== 'undefined') { 108 // Node 109 return require('jquery'); 110 } else { 111 return jQuery; 112 } 113}());
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.