You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

118 lines
2.8 KiB

/*!
@Name:ECTouch infinite js v0.1
$Author:carson
$Site:http://www.ectouch.cn
@Date:2016-01-16
@License:MIT
$('.aa').infinite({url:'', params:'a=b&c=d'})
*/
;(function($) {
"use strict";
var target = null;
var locked = false;
var opts = {
"url": '',
"pager": '1',
"size": '10',
"params": '',
"template": '',
"type": 'post',
"format": 'json',
"offset": '100'
}
var totalPage = 0;
var methods = {
// 初始化
init: function(options) {
target = $(this);
if (options) {
$.extend(opts, options);
}
methods.getData();
$(window).scroll(methods.checkScroll);
var method = {};
//获取当前页码
return method.getPager = function() {
return opts.pager;
},
//刷新当前页
method.reload = function() {
methods.getData();
},
//重新加载
method.onload = function(options) {
if (options) {
opts.params = options;
}
opts.pager = 1;
methods.getData();
},
//获取总页数
method.getTotalPage = function() {
return totalPage;
},
method
},
// 请求参数
getParam: function() {
var param = "page=" + opts.pager + "&size=" + opts.size;
param = param + "&" + opts.params;
return param;
},
// 请求数据
getData: function() {
locked = true;
var depr = (opts.url.indexOf('?') > 0) ? '&' : '?';
var url = opts.url + depr + "ts=" + Math.random();
$.ajax({
url: url,
type: opts.type,
dataType: opts.format,
data: methods.getParam(),
async: false,
success: function(data) {
totalPage = data.totalPage == 'undefind' ? 0 : data.totalPage;
template.config('openTag', '<%');
template.config('closeTag', '%>');
var html = template(opts.template, data);
if (opts.pager > 1) {
target.append(html);
} else {
target.html(html);
}
opts.pager++;
locked = false;
}
});
},
// 监听滚动
checkScroll: function() {
var scrollTop = $(window).scrollTop() + parseInt(opts.offset);
var documentHeight = $(document).height() - $(window).height();
if (scrollTop >= documentHeight && opts.pager <= totalPage && locked == false) {
methods.getData();
}
},
}
// $.fn.infinite = function(options) {
// return init(options, $(this));
// }
$.fn.infinite = function(method) {
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method == 'object' || !method) {
return methods.init.apply(this, arguments);
} else {
$.error('Method ' + method + ' does not exist!');
}
}
})(jQuery)