// JavaScript Document (function($){ $.fn.InfiniteScroll = function(options){ var element = $(this); var triggerFlag = false; var triggerScrollPx = -1; var settings = { contentSelector:"", selectorIndex:0, bufferNumber:5, bufferPx:40, startPage:2, dataPara:{}, dataPath:document.URL, dataType:"json", getDataHtml:function() {}, finishHandler:function() {} }; if(options){ $.extend(settings, options); } setNavigation(settings.startPage, true); function addContentHtml(Html, isBuffer){ var len = $(settings.contentSelector).length; if(isBuffer){ if(len > settings.bufferNumber){ $(settings.contentSelector).eq(-1 * settings.bufferNumber).after(Html); }else{ $(settings.contentSelector).eq(settings.selectorIndex).after(Html); } }else{ $(settings.contentSelector).eq(settings.selectorIndex).after(Html); } } function setNavigation(page, isBuffer){ addContentHtml('', isBuffer); setTriggerScrollPx(); } function setTriggerScrollPx(){ triggerScrollPx = getNavigation().offset().top; } function getNavigation(){ return element.find(".navigation"); } $(window).scroll(function (e) { if(triggerFlag){ return false; } var scrollNow = parseInt($(this).scrollTop()) + parseInt($(this).height()) + settings.bufferPx; if (scrollNow >= triggerScrollPx) { triggerFlag = true; var _navigation = getNavigation(); var _page = parseInt(_navigation.attr("data-page")); _navigation.remove(); var data = {}; data.isAjax = true; data.page = _page; if(settings.dataPara != null){ $.extend(data, settings.dataPara); } $.post(settings.dataPath, data, function(response){ var HTML = settings.getDataHtml(response.data); addContentHtml(HTML); if(!response.isFinish){ setNavigation(++_page, true); triggerFlag = false; }else{ settings.finishHandler(); } }, settings.dataType) } }); } })(jQuery)