jScroll

jQuery Plugin for Infinite Scrolling / Auto-Paging

2016-05-14 기준 버전입니다. 최신 버전을 확인하세요.

이 스크립트는 직접 설치하는 용도가 아닙니다. 다른 스크립트에서 메타 지시문 // @require https://update.greasyfork.org/scripts/19670/125705/jScroll.js을(를) 사용하여 포함하는 라이브러리입니다.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

/** 
 * infinitescroll - Lightweight Infinite Scrolling
 * Copyright (c) 2012 DIY Co
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this 
 * file except in compliance with the License. You may obtain a copy of the License at:
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under 
 * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 
 * ANY KIND, either express or implied. See the License for the specific language 
 * governing permissions and limitations under the License.
 *
 * @author Brian Reavis <[email protected]>
 */

;(function($) {
	
	$.fn.infiniteScroll = function() {
		var $container = $(this);
		var $window    = $(window);
		var $body      = $('body');
		var action     = 'init';
		var waiting    = false;
		var moreExists = true;
		
		// defaults
		// -----------------------------------------------------------------------------
		var options = {
			threshold : 80,
			loadMore  : function() {},
			onEnd     : null,
			iScroll   : null
		};
		
		// parse arguments
		// -----------------------------------------------------------------------------
		if (arguments.length) {
			if (typeof arguments[0] === 'string') {
				action = arguments[0];
				if (arguments.length > 1 && typeof arguments[1] === 'object') {
					options = $.extend(options, arguments[1]);
				}
			} else if (typeof arguments[0] === 'object') {
				options = $.extend(options, arguments[0]);
			}
		}
		
		// initialize
		// -----------------------------------------------------------------------------
		if (action === 'init') {
			var onScroll = function() {
				if (waiting || !moreExists) return;
					
				var dy = options.iScroll
					? -options.iScroll.maxScrollY + options.iScroll.y
					:  $body.outerHeight() - $window.height() - $window.scrollTop();
				
				if (dy < options.threshold) {
					waiting = true;
					options.loadMore(function(more) {
						if (more === false) {
							moreExists = false;
							if (typeof options.onEnd === 'function') {
								options.onEnd();
							}
						}
						waiting = false;
					});
				}
			}
			
			if (options.iScroll) {
				// ios scrolling
				var onScrollMove = options.iScroll.options.onScrollMove || null;
				options.iScroll.options.onScrollMove = function() {
					if (onScrollMove) onScrollMove();
					onScroll();
				}
				options.iScroll_scrollMove = onScrollMove;
			} else {
				// traditional scrolling
				$window.on('scroll.infinite resize.infinite', onScroll);
			}
			
			$container.data('infinite-scroll', options);
			$(onScroll);
		}
		
		// reinitialize (for when content changes)
		// -----------------------------------------------------------------------------
		if (action === 'reset') {
			var options = $container.data('infinite-scroll');
			if (options.iScroll) {
				if (options.iScroll_scrollMove) {
					options.iScroll.options.onScrollMove = options.iScroll_scrollMove;
				}
				options.iScroll.scrollTo(0, 0, 0, false);
			}
			$window.off('scroll.infinite resize.infinite');
			$container.infiniteScroll(options);
		}
		
		return this;
	};
	
})(jQuery);