From 3c271e60fab7df226bbfb2ad55e54a07cb87d4d9 Mon Sep 17 00:00:00 2001 From: Justin Schier Date: Thu, 8 May 2014 13:25:53 -0400 Subject: [PATCH] Added optional scrollable viewport other than window I added the ability to pass in scroll_selector, such as '#people'. Also refactored static "check_binded" variable to be stored as data on the scrollable element. --- jquery.appear.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/jquery.appear.js b/jquery.appear.js index ff0b764..4e7defc 100644 --- a/jquery.appear.js +++ b/jquery.appear.js @@ -11,11 +11,11 @@ (function($) { var selectors = []; - var check_binded = false; var check_lock = false; var defaults = { interval: 250, - force_process: false + force_process: false, + scroll_selector: window } var $window = $(window); @@ -64,9 +64,11 @@ $.fn.extend({ // watching for element's appearance in browser viewport appear: function(options) { + var opts = $.extend({}, defaults, options || {}); var selector = this.selector || this; - if (!check_binded) { + + if( typeof $(opts.scroll_selector).data('appear_binded') === 'undefined' ) { var on_check = function() { if (check_lock) { return; @@ -76,8 +78,10 @@ setTimeout(process, opts.interval); }; - $(window).scroll(on_check).resize(on_check); - check_binded = true; + $(opts.scroll_selector).on('scroll',on_check); + $(window).resize(on_check); + + $(opts.scroll_selector).data('appear_binded',true); } if (opts.force_process) { @@ -91,7 +95,7 @@ $.extend({ // force elements's appearance check force_appear: function() { - if (check_binded) { + if( typeof $(opts.scroll_selector).data('appear_binded') !== 'undefined' ) { process(); return true; };