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.4 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.pseudos.appeared = $.expr.createPseudo(function(arg) { 52 return function(element) { 53 var $element = $(element); 54 if (!$element.is(':visible')) { 55 return false; 56 } 57 58 var window_left = $window.scrollLeft(); 59 var window_top = $window.scrollTop(); 60 var offset = $element.offset(); 61 var left = offset.left; 62 var top = offset.top; 63 64 if (top + $element.height() >= window_top && 65 top - ($element.data('appear-top-offset') || 0) <= window_top + $window.height() && 66 left + $element.width() >= window_left && 67 left - ($element.data('appear-left-offset') || 0) <= window_left + $window.width()) { 68 return true; 69 } else { 70 return false; 71 } 72 }; 73 }); 74 75 $.fn.extend({ 76 // watching for element's appearance in browser viewport 77 appear: function(selector, options) { 78 $.appear(this, options); 79 return this; 80 } 81 }); 82 83 $.extend({ 84 appear: function(selector, options) { 85 var opts = $.extend({}, defaults, options || {}); 86 87 if (!check_binded) { 88 var on_check = function() { 89 if (check_lock) { 90 return; 91 } 92 check_lock = true; 93 94 setTimeout(process, opts.interval); 95 }; 96 97 $(window).scroll(on_check).resize(on_check); 98 check_binded = true; 99 } 100 101 if (opts.force_process) { 102 setTimeout(process, opts.interval); 103 } 104 105 add_selector(selector); 106 }, 107 // force elements's appearance check 108 force_appear: function() { 109 if (check_binded) { 110 process(); 111 return true; 112 } 113 return false; 114 } 115 }); 116})(function() { 117 if (typeof module !== 'undefined') { 118 // Node 119 return require('jquery'); 120 } else { 121 return jQuery; 122 } 123}());
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.