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