JQuery пагинации обработки видимых и невидимых страниц
Я использую JQuery для нумерации страниц. Я вытаскиваю сотни записей из базы данных, а затем jquery выполняет разбиение на страницы на переднем конце.
Все остальные функции работают нормально, кроме видимых страниц. Я хочу показывать 10 или менее страниц за раз, когда другие страницы должны показываться при нажатии следующей или предыдущей.
Пожалуйста, посмотрите на изображение: есть 15 записей, которые поступают из базы данных, и я показываю одну запись на страницу, которая работает нормально, но все 15 страниц показывают одновременно.
Изображение: https://www.dropbox.com/s/8od2z5wzoj8l4u6/pager.png?dl=0
Вот мой код
function previous(){
new_page = parseInt($('#current_page').val()) - 1;
//if there is an item before the current active link run the function
if($('.active_page').prev('.page_link').length==true){
go_to_page(new_page);
}
}
function next(){
new_page = parseInt($('#current_page').val()) + 1;
//if there is an item after the current active link run the function
if($('.active_page').next('.page_link').length==true){
go_to_page(new_page);
}
}
function go_to_page(page_num){
//get the number of items shown per page
var show_per_page = parseInt($('#show_per_page').val());
//get the element number where to start the slice from
start_from = page_num * show_per_page;
//get the element number where to end the slice
end_on = start_from + show_per_page;
//hide all children elements of ayah_image div, get specific items and show them
$('#ayah_image').children().css('display', 'none').slice(start_from, end_on).css('display', 'block');
/*get the page link that has longdesc attribute of the current page and add active_page class to it
and remove that class from previously active page link*/
$('.page_link[longdesc=' + page_num +']').addClass('active_page').siblings('.active_page').removeClass('active_page');
//update the current page input field
$('#current_page').val(page_num);
}
$( document ).ready(function() {
var show_per_page = 1;
//getting the amount of elements inside ayah_image div
var number_of_items = $('#ayah_image').children().size();
//calculate the number of pages we are going to have
var number_of_pages = Math.ceil(number_of_items/show_per_page);
//set the value of our hidden input fields
$('#current_page').val(0);
$('#show_per_page').val(show_per_page);
//now when we got all we need for the navigation let's make it '
/*
what are we going to have in the navigation?
- link to previous page
- links to specific pages
- link to next page
*/
var navigation_html = '<a class="previous_link" href="javascript:previous();">Prev</a>';
var current_link = 0;
while(number_of_pages > current_link){
navigation_html += '<a class="page_link" style="height:20px; width:30px;" href="javascript:go_to_page(' + current_link +')" longdesc="' + current_link +'">'+ (current_link + 1) +'</a>';
current_link++;
}
navigation_html += '<a class="next_link" href="javascript:next();">Next</a>';
$('#page_navigation').html(navigation_html);
//add active_page class to the first page link
$('#page_navigation .page_link:first').addClass('active_page');
$('#ayah_image').children().css('display', 'none');
//and show the first n (show_per_page) elements
$('#ayah_image').children().slice(0, show_per_page).css('display', 'block');
});
1 ответ
Похоже, вам нужна пара вещей:
- Обновляйте ссылки на страницы, когда вы нажимаете навигационную ссылку.
- Показывать только заданное количество ссылок на страницы вокруг выбранной в данный момент страницы.
Так что переместите логику генерации ссылки на страницу в такую функцию:
function generatePageLinks(curPage) {
var MAX_PAGE_LINKS = 10;
var navigation_html = '<a class="previous_link" href="javascript:previous();">Prev</a>';
var current_link = curPage - (MAX_PAGE_LINKS / 2);
while(current_link < (MAX_PAGE_LINKS / 2) && number_of_pages > current_link){
navigation_html += '<a class="page_link" style="height:20px; width:30px;" href="javascript:go_to_page(' + current_link +')" longdesc="' + current_link +'">'+ (current_link + 1) +'</a>';
current_link++;
}
navigation_html += '<a class="next_link" href="javascript:next();">Next</a>';
return navigation_html;
}
И позвоните по этой ссылке с go_to_page (и начальный вызов в doc.ready).
Непроверенный, но звучит разумно в моей голове;).