function clPaginacao(parametros) { // parâmetros: "pai", "forma", "funcaoBusca", "elementoBase", "elementoScroll", "tamPagina" for (var i in parametros) { this[i] = parametros[i]; } this.inicia(); // quantos itens ficaram para fora da lista (por alteração de nome ou inclusão) // ou na reordenação ficaram além do último da lista: // se o item sair da lista (paginada) onde está, pode ser que nas próximas listas o primeiro item // não seja mais retornado. Então tem que decrementar o início da pagina para cada caso destes this.quantForaLista = 0; this.habilita(); this.colocaEvento(); } clPaginacao.prototype.inicia = function() { this.numPagina = 1; } clPaginacao.prototype.colocaEvento = function() { // a paginação pode ser "scroll" ou "vermais" this[this.forma](); } clPaginacao.prototype.habilita = function() { this.ativo = true; } clPaginacao.prototype.desabilita = function() { this.ativo = false; } clPaginacao.prototype.vermais = function() { var estaPaginacao = this; var botao = $("ver mais").appendTo($(this.elementoBase)) .on('click', function(e) { estaPaginacao.proxima.call(estaPaginacao); if (e.preventDefault) e.preventDefault(); else return false; }); } clPaginacao.prototype.scroll = function() { var estaPaginacao = this; var elementoScroll = (this.elementoScroll) ? $(this.elementoScroll) : $(this.elementoBase); elementoScroll.on('scroll', function() { var scrollLimite = elementoScroll[0].scrollHeight - elementoScroll.height() - 200; if (estaPaginacao.ativo && (elementoScroll.scrollTop() >= scrollLimite)) { estaPaginacao.proxima.call(estaPaginacao); } }); } clPaginacao.prototype.proxima = function() { this.desabilita(); // incrementa o número do página a ser carregada. this.numPagina++; if (this.numPagina > 1) colocaClasse(this.elementoBase, 'paginado'); // busca a lista novamente com um novo número de página. this.funcaoBusca.call(this.pai, true); } clPaginacao.prototype.querystring = function() { // se o item sair da lista (paginada) onde está, pode ser que nas próximas listas o primeiro item não seja mais retornado. // Por isso decrementa o início da pagina para cada caso destes, usando o quantForaLista var tamPagina = (this.tamPagina) ? this.tamPagina : "50"; return '&tamPagina=' + tamPagina + '&numPagina=' + this.numPagina + '&quantForaLista=' + this.quantForaLista; } clPaginacao.prototype.getForaLista = function() { return this.quantForaLista; } clPaginacao.prototype.incrementaForaLista = function() { this.quantForaLista++; } clPaginacao.prototype.ajustaCarregando = function() { if (this.pai.classeObjeto == "colecao" && this.numPagina > 1) { var divBase = $(this.elementoBase); var divCarregando = divBase.find("div.carregandoMain"); divCarregando.css("top", divBase.find("ul#colecao").height() - 65); } }