/* * jQuery liPaginate v 4.1 * * Copyright 2013, Linnik Yura | LI MASS CODE | http://masscode.ru * http://masscode.ru/index.php/k2/item/42-lipaginate * Free to use * * 28.05.2013 */ (function($){ $.fn.liPaginate = function(params){ var p = $.extend({ easing:'easeOutQuart', //http://gsgd.co.uk/sandbox/jquery/easing/ duration: 1000, //строка или число, определяющие, как долго будет длиться анимация effect:'vSlide', //simple, fade, hSlide, vSlide - эффект анимации pagePos:'double', //after, before, double - положение навигации pageHeight:'auto', //[px] - высота текстового блока, ['auto'] - определяется автоматически относительно высоты экрана maxPage:11 //любое нечетное число - максимальное видимое число страниц в навигации }, params); return this.each(function(){ var pWrap = $(this), //Заворачиваем текстовые ноды верхнего уровня в span nodes = $(pWrap).contents().each(function () { if (this.nodeType == 3) { $(this).wrap(''); } }); //Удаляем пустые теги $('.nodeTxt',pWrap).each(function(){ var nodeHtml = $.trim($(this).html()); if(nodeHtml == ''){ $(this).remove(); } }); var pChid = pWrap.children(), pWrapHeight = pWrap.height(), pHeight = p.pageHeight, dHeight = pWrapHeight, pChidLength = pChid.length, i = 0, coll = false, pChildEl = pChid.eq(0), pChildTemp = pChildEl; //Определяем высоту для страничек if(p.pageHeight == 'auto'){ pHeight = ($(window).height() - 100) } //Разбиваем текст на страницы function heightFunc(){ pChildEl = pChid.eq(i); pChildCollection = pChildEl; pChildTemp = pChildEl; h1 = pChildEl.outerHeight(true); function heightCompare(){ if(h1 < pHeight){ coll = true; pChildTemp = pChildTemp.next(); pChildCollection = pChildCollection.add(pChildTemp); h2 = pChildTemp.outerHeight(true); h1 = (h1 + h2); i++; if(i <= pChidLength - 1){ heightCompare(); }else{ var pageItem = $('
').addClass('pageItem').css({height:pHeight}); pChildCollection.wrapAll(pageItem); } }else{ if(i == 0){ i++ var pageItem = $('
').addClass('pageItem').css({height:pHeight}); pChildCollection.wrapAll(pageItem); pChildCollection.splice((pChildCollection.length - 1) ,1); }else{ if(coll){ coll = false; var pageItem = $('
').addClass('pageItem').css({height:pHeight}); pChildCollection.splice((pChildCollection.length - 1) ,1); pChildCollection.wrapAll(pageItem); }else{ i++ var pageItem = $('
').addClass('pageItem').css({height:pHeight}); pChildCollection.wrapAll(pageItem); pChildCollection.splice((pChildCollection.length - 1) ,1); } } if(i <= pChidLength - 1){ heightFunc(); } } }; heightCompare(); }; heightFunc(); //Создаем постраничку для созданых страниц var pageItemEl = $('.pageItem',pWrap), pageLinkWrap = $('
').addClass('pageLinkWrap'); pageItemEl.eq(0).addClass('pageActive'); pageItemEl.each(function(e){ var pageLink = $('').addClass('pageLink').html((e+1)).appendTo(pageLinkWrap); }) //Добавляем обработчик на постраничку pWrap.on('click','.pageLink',function(){ clickLink = $(this); activeIndex = $('.pageLink',clickLink.parent()).index(clickLink); $('.pageLinkWrap',pWrap).each(function(){ indexNow = ($('.pageLinkActive',$(this)).html() - 1); $('.pageLink',$(this)).removeClass('pageLinkActive'); $('.pageLink',$(this)).eq(activeIndex).addClass('pageLinkActive'); if(p.effect == 'fade'){ pageItemEl.hide().eq(activeIndex).fadeTo(p.duration,1); } if(p.effect == 'simple'){ pageItemEl.hide().eq(activeIndex).show(); } if(p.effect == 'hSlide'){ if(indexNow < activeIndex){ pageItemEl.eq(indexNow).stop(true).css({zIndex:'1'}).fadeTo(400,0); pageItemEl.eq(activeIndex).css({left:$('.pageItemElWrap',pWrap).width(),opacity:'1',zIndex:'2'}).show().animate({left:'0'},p.duration,p.easing); } if(indexNow > activeIndex){ pageItemEl.eq(indexNow).stop(true).css({zIndex:'1'}).fadeTo(400,0); pageItemEl.eq(activeIndex).css({left:-$('.pageItemElWrap',pWrap).width(),opacity:'1',zIndex:'2'}).show().animate({left:'0'},p.duration,p.easing); } } if(p.effect == 'vSlide'){ if(indexNow < activeIndex){ pageItemEl.eq(indexNow).stop(true).css({zIndex:'1'}).fadeTo(400,0); pageItemEl.eq(activeIndex).css({top:$('.pageItemElWrap',pWrap).height(),opacity:'1',zIndex:'2'}).show().animate({top:'0'},p.duration,p.easing); } if(indexNow > activeIndex){ pageItemEl.eq(indexNow).stop(true).css({zIndex:'1'}).fadeTo(400,0); pageItemEl.eq(activeIndex).css({top:-$('.pageItemElWrap',pWrap).height(),opacity:'1',zIndex:'2'}).show().animate({top:'0'},p.duration,p.easing); } } /*отключаем/включаем next и prev кнопки*/ var pageNext = $('.pageNext',$(this)), pagePrev = $('.pagePrev',$(this)), pageLinkLength = $('.pageLink',$(this)).length disableNext($('.pageLinkActive',$(this)).html(), pageLinkLength, pageNext) disablePrev($('.pageLinkActive',$(this)).html(), pagePrev) navHide(); }) return false; }) //Вставляем постраничку в DOM if(p.pagePos == 'after') pageLinkWrap.appendTo(pWrap); if(p.pagePos == 'before') pageLinkWrap.prependTo(pWrap); if(p.pagePos == 'double'){ pageLinkWrap.clone().prependTo(pWrap); pageLinkWrap.appendTo(pWrap); } /*отключаем/включаем next кнопку*/ var disableNext = function(pActive,pLength,pNext){ if(pActive == pLength){ pNext.addClass('disable') }else{ pNext.removeClass('disable') } } /*отключаем/включаем prev кнопку*/ var disablePrev = function(pActive,pPrev){ if(pActive == 1){ pPrev.addClass('disable') }else{ pPrev.removeClass('disable') } } //Добавляем к постраничке навигацию Next Prev $('.pageLinkWrap',pWrap).each(function(){ var plw = $(this); $('.pageLink',plw).eq(0).addClass('pageLinkActive'); var pageNext = $('').html('»').addClass('pageNext').appendTo(plw); var pagePrev = $('').html('«').addClass('pagePrev').addClass('disable').prependTo(plw); var nowActiveLink = 1 var pageLinkLength = $('.pageLink',plw).length pageNext.on('click',function(){ nowActiveLink = parseInt($('.pageLinkActive',plw).html()); pagePrev.removeClass('disable') nal = nowActiveLink if(nowActiveLink < pageLinkLength){ autoClick(); /*отключаем/включаем next кнопку*/ disableNext($('.pageLinkActive',plw).html(), pageLinkLength, pageNext) } }) pagePrev.on('click',function(){ nowActiveLink = parseInt($('.pageLinkActive',plw).html()); pageNext.removeClass('disable') nal = nowActiveLink-2 if(nowActiveLink > 1){ autoClick(); /*отключаем/включаем prev кнопку*/ disablePrev($('.pageLinkActive',plw).html(), pagePrev) } }) function autoClick(){ $('.pageLink',plw).eq((nal)).trigger('click') } }) //Устанавливаем эффекты переходов if(p.effect == 'hSlide'){ var pageItemElWrap = $('
').addClass('pageItemElWrap').css({height:pHeight, position:'relative', width:'100%',overflow:'hidden'}) pageItemEl.wrapAll(pageItemElWrap) pageItemEl.eq(0).css({position:'absolute',top:'0',width:$('.pageItemElWrap',pWrap).width(),left:'0'}) pageItemEl.not(':eq(0)').css({position:'absolute',top:'0',width:$('.pageItemElWrap',pWrap).width(),left:-$('.pageItemElWrap',pWrap).width()}) } if(p.effect == 'vSlide'){ var pageItemElWrap = $('
').addClass('pageItemElWrap').css({height:pHeight, position:'relative', width:'100%',overflow:'hidden'}) pageItemEl.wrapAll(pageItemElWrap) pageItemEl.eq(0).css({position:'absolute',top:'0',width:$('.pageItemElWrap',pWrap).width(),left:'0'}) pageItemEl.not(':eq(0)').css({position:'absolute',top:'0',width:$('.pageItemElWrap',pWrap).width(),top:-$('.pageItemElWrap',pWrap).height()}) } var pageAnd = $('').addClass('pageAnd').html('Последняя'); $('.pageNext',pWrap).after(pageAnd.addClass('pageLast')); var pageAnd = $('').addClass('pageAnd').html('Первая'); $('.pagePrev',pWrap).before(pageAnd.addClass('pageFirst')); //start var navHide = function(){ $('.pageLinkWrap',pWrap).each(function(){ var plw = $(this); var pageLink = $('.pageLink',plw); var pageLinkLength = pageLink.length; var pageLinkActive = $('.pageLinkActive',plw); pageLink.show(); if(pageLinkLength > p.maxPage){ var activeIndex = pageLink.index(pageLinkActive); pageLink.each(function(e){ var pageLinkIndex = pageLink.index($(this)); if(pageLinkIndex > (activeIndex + Math.floor(p.maxPage/2))){ $(this).hide(); } if(pageLinkIndex < (activeIndex - Math.floor(p.maxPage/2))){ $(this).hide(); } }) if($('.pageLink:visible',plw).length < p.maxPage){ if($('.pageLink',plw).index($('.pageLinkActive',plw)) < (p.maxPage-Math.floor(p.maxPage/2))){ for(i=0;i (pageLinkLength-(p.maxPage-Math.floor(p.maxPage/2)))){ for(i=pageLinkLength-p.maxPage;i