(function($){$.fn.appear=function(fn, options){var settings=$.extend({data: undefined, one: true, accX: 0, accY: 0 }, options); return this.each(function(){var t=$(this); t.appeared=false; if(!fn){t.trigger('appear', settings.data); return; } var w=$(window); var check=function(){if(!t.is(':visible')){t.appeared=false; return; } var a=w.scrollLeft(); var b=w.scrollTop(); var o=t.offset(); var x=o.left; var y=o.top; var ax=settings.accX; var ay=settings.accY; var th=t.height(); var wh=w.height(); var tw=t.width(); var ww=w.width(); if(y + th + ay >=b&&y <=b + wh + ay&&x + tw + ax >=a&&x <=a + ww + ax){if(!t.appeared) t.trigger('appear', settings.data); }else{t.appeared=false; }}; var modifiedFn=function(){t.appeared=true; if(settings.one){w.unbind('scroll', check); var i=$.inArray(check, $.fn.appear.checks); if(i >=0) $.fn.appear.checks.splice(i, 1); } fn.apply(this, arguments); }; if(settings.one) t.one('appear', settings.data, modifiedFn); else t.bind('appear', settings.data, modifiedFn); w.scroll(check); $.fn.appear.checks.push(check); (check)(); });}; $.extend($.fn.appear, {checks: [], timeout: null, checkAll: function(){var length=$.fn.appear.checks.length; if(length > 0) while (length--) ($.fn.appear.checks[length])(); }, run: function(){if($.fn.appear.timeout) clearTimeout($.fn.appear.timeout); $.fn.appear.timeout=setTimeout($.fn.appear.checkAll, 20); }});$.each(['append', 'prepend', 'after', 'before', 'attr', 'removeAttr', 'addClass', 'removeClass', 'toggleClass', 'remove', 'css', 'show', 'hide'], function(i, n){var old=$.fn[n]; if(old){$.fn[n]=function(){var r=old.apply(this, arguments); $.fn.appear.run(); return r; }} });})(jQuery);