1"use strict"; 2/* 3 * jQuery appear plugin 4 * 5 * Copyright (c) 2012 Andrey Sidorov 6 * licensed under MIT license. 7 * 8 * https://github.com/morr/jquery.appear/ 9 * 10 * Version: 0.3.4 11 */ 12(function($) { 13 var selectors = []; 14 15 var check_binded = false; 16 var check_lock = false; 17 var defaults = { 18 interval: 250, 19 force_process: false 20 }; 21 var $window = $(window); 22 23 var $prior_appeared; 24 25 function process() { 26 check_lock = false; 27 for (var index = 0, selectorsLength = selectors.length; index < selectorsLength; index++) { 28 var $appeared = $(selectors[index]).filter(function() { 29 return $(this).is(':appeared'); 30 }); 31 32 $appeared.trigger('appear', [$appeared]); 33 34 if ($prior_appeared) { 35 var $disappeared = $prior_appeared.not($appeared); 36 $disappeared.trigger('disappear', [$disappeared]); 37 } 38 $prior_appeared = $appeared; 39 } 40 } 41 42 // "appeared" custom filter 43 $.expr[':']['appeared'] = function(element) { 44 var $element = $(element); 45 if (!$element.is(':visible')) { 46 return false; 47 } 48 49 var window_left = $window.scrollLeft(); 50 var window_top = $window.scrollTop(); 51 var offset = $element.offset(); 52 var left = offset.left; 53 var top = offset.top; 54 55 if (top + $element.height() >= window_top && 56 top - ($element.data('appear-top-offset') || 0) <= window_top + $window.height() && 57 left + $element.width() >= window_left && 58 left - ($element.data('appear-left-offset') || 0) <= window_left + $window.width()) { 59 return true; 60 } else { 61 return false; 62 } 63 }; 64 65 $.fn.extend({ 66 // watching for element's appearance in browser viewport 67 appear: function(options) { 68 var opts = $.extend({}, defaults, options || {}); 69 var selector = this.selector || this; 70 if (!check_binded) { 71 var on_check = function() { 72 if (check_lock) { 73 return; 74 } 75 check_lock = true; 76 77 setTimeout(process, opts.interval); 78 }; 79 80 $(window).on('scroll', on_check).on('resize', on_check); 81 check_binded = true; 82 } 83 84 if (opts.force_process) { 85 setTimeout(process, opts.interval); 86 } 87 selectors.push(selector); 88 return $(selector); 89 } 90 }); 91 92 $.extend({ 93 // force elements's appearance check 94 force_appear: function() { 95 if (check_binded) { 96 process(); 97 return true; 98 } 99 return false; 100 } 101 }); 102})(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.