In this tutorial we will use https://restcountries.com/ api to generate data for pagination.
We will use XMLHttpRequest to fetch data from the api.
HTML
<div class="container"> <div class="countries_wrapper"></div> <div class="pagination"></div> </div>
CSS
html { box-sizing: border-box; } *, *::before, *::after { box-sizing: inherit; } body { padding: 0; margin: 0; height: 100vh; background-color: #48014B; display: flex; justify-content: center; } .container { width: 80%; margin-top: 50px; } .countries_wrapper { display: flex; flex-wrap: wrap; gap: 1rem; } .country_detail { display: flex; flex-direction: column; } .country { padding: 5px; text-align: center; font-family: Arial, Helvetica, sans-serif; color: #fff; background-color: #FC255A; border-top: 2px solid #000; } h2, p { margin: 0; padding: 0; } ul { margin-top: 50px; padding: 0; } li { display: inline-block; padding: 15px; color: #ddd; background-color: #FC255A; border: 1px solid #000; cursor: pointer; } .current { background-color: #fff; color: #FC255A; }
JS
let list = []; let postPerPage = 3; const countries = document.querySelector('.countries_wrapper'); const pagination = document.querySelector('.pagination'); function getCountries() { const xhr = new XMLHttpRequest(); xhr.open('GET', 'https://restcountries.com/v3.1/all'); xhr.onreadystatechange = function () { if (this.readyState === 4) { if (this.status === 200) { list = JSON.parse(this.response).slice(0, 15); loadCountries(1) } } }; xhr.send(); } function loadCountries(page) { countries.innerHTML = ''; pagination.innerHTML = ''; let startPost = (page - 1) * postPerPage; let endPost = page * postPerPage; let totalPages = Math.ceil(list.length / postPerPage); let currentPage = list.slice(startPost, endPost) let ul = document.createElement('ul'); currentPage.forEach(element => { console.log(element.name.common); let mainDiv = document.createElement('div'); mainDiv.classList.add('country_detail'); let detailDiv = document.createElement('div'); detailDiv.classList.add('country'); let header2 = document.createElement('h2'); let p = document.createElement('p'); let elem = document.createElement("img"); elem.setAttribute("src", element.flags.png); header2.innerHTML = element.name.common; if (element.capital) { p.innerHTML = `Captial: ${element.capital[0]}`; } mainDiv.append(elem); detailDiv.append(header2) detailDiv.append(p); mainDiv.append(detailDiv) countries.append(mainDiv) }) for (let i = 0; i < totalPages; i++) { let li = document.createElement('li'); li.textContent = (i + 1); li.addEventListener('click', () => { loadCountries(i + 1); }); if (i + 1 === page) { li.classList.add('current'); } ul.appendChild(li); } pagination.appendChild(ul); } document.addEventListener('DOMContentLoaded', getCountries);