/* ** Anderson Ferminiano ** contato@andersonferminiano.com -- feel free to contact me for bugs or new implementations. ** jQuery ScrollPagination ** 28th/March/2011 ** http://andersonferminiano.com/jqueryscrollpagination/ ** You may use this script for free, but keep my credits. ** Thank you. */ (function( $ ){ $.fn.scrollPagination = function(options) { var opts = $.extend($.fn.scrollPagination.defaults, options); var target = opts.scrollTarget; if (target == null){ target = obj; } opts.scrollTarget = target; return this.each(function() { $.fn.scrollPagination.init($(this), opts); }); }; $.fn.stopScrollPagination = function(){ return this.each(function() { $(this).attr('scrollPagination', 'disabled'); }); }; $.fn.scrollPagination.loadContent = function(obj, opts){ var target = opts.scrollTarget; // console.log($.trim(opts.lastdata).length==0, opts.lastdata.match(//)!=null); var reach_last_page = ($.trim(opts.lastdata).length==0 || /\<\!--END_PAGINATION--\>/.test(opts.lastdata)==true); var mayLoadContent = ($(target).scrollTop()+opts.heightOffset >= $(document).height() - $(target).height()) && (!reach_last_page) && (opts.lock); if (mayLoadContent){ if (opts.beforeLoad != null){ opts.beforeLoad(); } opts.lock = false; $(obj).children().attr('rel', 'loaded'); $.ajax({ type: 'POST', url: opts.contentPage, data: opts.contentData, success: function(data){ $(obj).append(data); opts.lastdata = data; if(/\<\!--CONT_PAGINATION--\>/.test(data)==true){ opts.lock = true; } var objectsRendered = $(obj).children('[rel!=loaded]'); if (opts.afterLoad != null){ opts.afterLoad(objectsRendered); } }, dataType: 'html' }); } }; $.fn.scrollPagination.init = function(obj, opts){ var target = opts.scrollTarget; $(obj).attr('scrollPagination', 'enabled'); // $.fn.scrollPagination.loadContent(obj, opts); // console.log(opts); $(target).scroll(function(event){ if ($(obj).attr('scrollPagination') == 'enabled'){ $.fn.scrollPagination.loadContent(obj, opts); } else { event.stopPropagation(); } }); $.fn.scrollPagination.loadContent(obj, opts); }; $.fn.scrollPagination.defaults = { 'contentPage' : null, 'contentData' : {}, 'beforeLoad': null, 'afterLoad': null , 'scrollTarget': null, 'heightOffset': 0, 'lock': true, 'lastdata': '_' }; })( jQuery );