1/* 2 * Viewport - jQuery selectors for finding elements in viewport 3 * 4 * Copyright (c) 2008-2009 Mika Tuupola 5 * 6 * Licensed under the MIT license: 7 * http://www.opensource.org/licenses/mit-license.php 8 * 9 * Project home: 10 * http://www.appelsiini.net/projects/viewport 11 * 12 */ 13(function($) { 14 $.belowthefold = function(element, settings) { 15 var fold = $(window).height() + $(window).scrollTop(); 16 return fold <= $(element).offset().top - settings.threshold; 17 }; 18 $.abovethetop = function(element, settings) { 19 var top = $(window).scrollTop(); 20 return top >= $(element).offset().top + $(element).height() - settings.threshold; 21 }; 22 $.rightofscreen = function(element, settings) { 23 var fold = $(window).width() + $(window).scrollLeft(); 24 return fold <= $(element).offset().left - settings.threshold; 25 }; 26 $.leftofscreen = function(element, settings) { 27 var left = $(window).scrollLeft(); 28 return left >= $(element).offset().left + $(element).width() - settings.threshold; 29 }; 30 $.inviewport = function(element, settings) { 31 return !$.rightofscreen(element, settings) && !$.leftofscreen(element, settings) && !$.belowthefold(element, settings) && !$.abovethetop(element, settings); 32 }; 33 $.extend($.expr[':'], { 34 "below-the-fold": function(a, i, m) { 35 return $.belowthefold(a, {threshold : 0}); 36 }, 37 "above-the-top": function(a, i, m) { 38 return $.abovethetop(a, {threshold : 0}); 39 }, 40 "left-of-screen": function(a, i, m) { 41 return $.leftofscreen(a, {threshold : 0}); 42 }, 43 "right-of-screen": function(a, i, m) { 44 return $.rightofscreen(a, {threshold : 0}); 45 }, 46 "in-viewport": function(a, i, m) { 47 return $.inviewport(a, {threshold : 0}); 48 } 49 }); 50})(jQuery); 51 52 53 54/* 55 * jQuery appear plugin 56 * 57 * Copyright (c) 2012 Andrey Sidorov 58 * licensed under MIT license. 59 * 60 * https://github.com/morr/jquery.appear/ 61 * 62 * Version: 0.3.4 63 */ 64(function($) { 65 var selectors = []; 66 67 var check_binded = false; 68 var check_lock = false; 69 var defaults = { 70 interval: 250, 71 force_process: false 72 } 73 var $window = $(window); 74 75 var $prior_appeared; 76 77 function process() { 78 check_lock = false; 79 for (var index = 0, selectorsLength = selectors.length; index < selectorsLength; index++) { 80 var $appeared = $(selectors[index]).filter(function() { 81 return $(this).is(':appeared'); 82 }); 83 84 $appeared.trigger('appear', [$appeared]); 85 86 if ($prior_appeared) { 87 var $disappeared = $prior_appeared.not($appeared); 88 $disappeared.trigger('disappear', [$disappeared]); 89 } 90 $prior_appeared = $appeared; 91 } 92 } 93 94 // "appeared" custom filter 95 $.expr[':']['appeared'] = function(element) { 96 var $element = $(element); 97 if (!$element.is(':visible')) { 98 return false; 99 } 100 101 var window_left = $window.scrollLeft(); 102 var window_top = $window.scrollTop(); 103 var offset = $element.offset(); 104 var left = offset.left; 105 var top = offset.top; 106 107 if (top + $element.height() >= window_top && 108 top - ($element.data('appear-top-offset') || 0) <= window_top + $window.height() && 109 left + $element.width() >= window_left && 110 left - ($element.data('appear-left-offset') || 0) <= window_left + $window.width()) { 111 return true; 112 } else { 113 return false; 114 } 115 } 116 117 $.fn.extend({ 118 // watching for element's appearance in browser viewport 119 appear: function(options) { 120 var opts = $.extend({}, defaults, options || {}); 121 var selector = this.selector || this; 122 if (!check_binded) { 123 var on_check = function() { 124 if (check_lock) { 125 return; 126 } 127 check_lock = true; 128 129 setTimeout(process, opts.interval); 130 }; 131 132 $(window).scroll(on_check).resize(on_check); 133 check_binded = true; 134 } 135 136 if (opts.force_process) { 137 setTimeout(process, opts.interval); 138 } 139 selectors.push(selector); 140 return $(selector); 141 } 142 }); 143 144 $.extend({ 145 // force elements's appearance check 146 force_appear: function() { 147 if (check_binded) { 148 process(); 149 return true; 150 }; 151 return false; 152 } 153 }); 154})(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.