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