Skip to content

Latest commit

 

History

History
86 lines (68 loc) · 1.9 KB

File metadata and controls

86 lines (68 loc) · 1.9 KB

Pagination

<div class="list"></div>
<div class="buttons">
    <button class="first">First</button>
    <button class="previous">Previous</button>
    <button class="next">Next</button>
    <button class="last">Last</button>
</div>
const list = [];
const currentPageList = [];
let currentPage = 1;
let numOfPages = 0;
let itemsPerPage = 10;

const makeList = (listLength) => {
    for (let i = 1; i <= listLength; i++) {
        list.push(i);
    }

    numOfPages = Math.ceil(listLength / itemsPerPage);
}

const drawList = () => {
    const list = document.querySelector(".list");
    let items = '';

    for (let i = 0; i < currentPageList.length; i++) {
        items += 'Item-' + currentPageList[i] + '<br/>';
    }

    list.innerHTML = items;
}

const updateButtons = () => {
    document.querySelector(".next").disabled = currentPage === numOfPages ? true : false;
    document.querySelector(".previous").disabled = currentPage === 1 ? true : false;
}

const loadList = (currentPage) => {
    let start = (currentPage - 1) * itemsPerPage;
    let end = start + itemsPerPage;

    currentPageList = list.slice(start, end);
    drawList();
    updateButtons();
};

const goToPage = pageNum => {
    currentPage = pageNum;
    loadList(currentPage);
};

const nextPage = () => {
    goToPage(currentPage + 1);
};

const prevPage = () => {
    goToPage(currentPage - 1);
};

const firstPage = () => {
    goToPage(1);
};

const lastPage = () => {
    goToPage(numOfPages);
};

makeList(50);
loadList(1);

const nextButton = document.querySelector(".next");
const prevButton = document.querySelector(".previous");
const firstButton = document.querySelector(".first");
const lastButton = document.querySelector(".last");

nextButton.addEventListener('click', nextPage);
prevButton.addEventListener('click', prevPage);
firstButton.addEventListener('click', firstPage);
lastButton.addEventListener('click', lastPage);