Ошибка ReferenceError: Can't find variable: createPagination как исправить?
При вызове функции createPagination в файле main.js - получаю ошибку Can't find variable: createPagination.
модуль pagination.js:
const element = document.querySelector(".pagination ul");
function createPagination(totalPages, page) {
let liTag = "";
let active;
let beforePage = page - 1;
let afterPage = page + 1;
if (page > 1) {
//show the next button if the page value is greater than 1
liTag += `<li class="btn prev" onclick="createPagination(${totalPages}, ${
page - 1
})"><span><i class="fas fa-angle-left"></i> Prev</span></li>`;
}
if (page > 2) {
//if page value is less than 2 then add 1 after the previous button
liTag += `<li class="first numb" onclick="createPagination(${totalPages}, 1)"><span>1</span></li>`;
if (page > 3) {
//if page value is greater than 3 then add this (...) after the first li or page
liTag += `<li class="dots"><span>...</span></li>`;
}
}
// how many pages or li show before the current li
if (page == totalPages) {
beforePage = beforePage - 2;
} else if (page == totalPages - 1) {
beforePage = beforePage - 1;
}
// how many pages or li show after the current li
if (page == 1) {
afterPage = afterPage + 2;
} else if (page == 2) {
afterPage = afterPage + 1;
}
for (var plength = beforePage; plength <= afterPage; plength++) {
if (plength > totalPages) {
//if plength is greater than totalPage length then continue
continue;
}
if (plength == 0) {
//if plength is 0 than add +1 in plength value
plength = plength + 1;
}
if (page == plength) {
//if page is equal to plength than assign active string in the active variable
active = "active";
} else {
//else leave empty to the active variable
active = "";
}
liTag += `<li class="numb ${active}" onclick="createPagination(${totalPages}, ${plength})"><span>${plength}</span></li>`;
}
if (page < totalPages - 1) {
//if page value is less than totalPage value by -1 then show the last li or page
if (page < totalPages - 2) {
//if page value is less than totalPage value by -2 then add this (...) before the last li or page
liTag += `<li class="dots"><span>...</span></li>`;
}
liTag += `<li class="last numb" onclick="createPagination(${totalPages}, ${totalPages})"><span>${totalPages}</span></li>`;
}
if (page < totalPages) {
//show the next button if the page value is less than totalPage(20)
liTag += `<li class="btn next" onclick="createPagination(${totalPages}, ${
page + 1
})"><span>Next <i class="fas fa-angle-right"></i></span></li>`;
}
element.innerHTML = liTag; //add li tag inside ul tag
return liTag; //return the li tag
}
export default createPagination;
main.js:
import "./style.css";
let {
default: createPagination
} = await
import ("./modules/pagination.js");
const element = document.querySelector(".pagination ul");
let totalPages = 5;
let page = 2;
//calling function with passing parameters and adding inside element which is ul tag
element.innerHTML = createPagination(totalPages, page);
index.html
<!-- <!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite App</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/main.js"></script>
</body>
</html> -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pagination in JavaScript </title>
<link rel="stylesheet" href="style.css">
<script src="https://kit.fontawesome.com/47cad546ff.js" crossorigin="anonymous"></script>
<script type="module" src="/main.js" defer></script>
</head>
<body>
<div class="pagination">
<ul>
<!--pages or li are comes from javascript -->
</ul>
</div>
</body>
</html>
style.css
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@200;300;400;500;600;700&display=swap');
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Poppins', sans-serif;
}
body {
display: flex;
align-items: center;
justify-content: center;
background: #20B2AA;
min-height: 100vh;
padding: 10px;
}
.pagination ul {
width: 100%;
display: flex;
flex-wrap: wrap;
background: #fff;
padding: 8px;
border-radius: 50px;
box-shadow: 0px 10px 15px rgba(0, 0, 0, 0.1);
}
.pagination ul li {
color: #20B2AA;
list-style: none;
line-height: 45px;
text-align: center;
font-size: 18px;
font-weight: 500;
cursor: pointer;
user-select: none;
transition: all 0.3s ease;
}
.pagination ul li.numb {
list-style: none;
height: 45px;
width: 45px;
margin: 0 3px;
line-height: 45px;
border-radius: 50%;
}
.pagination ul li.numb.first {
margin: 0px 3px 0 -5px;
}
.pagination ul li.numb.last {
margin: 0px -5px 0 3px;
}
.pagination ul li.dots {
font-size: 22px;
cursor: default;
}
.pagination ul li.btn {
padding: 0 20px;
border-radius: 50px;
}
.pagination li.active,
.pagination ul li.numb:hover,
.pagination ul li:first-child:hover,
.pagination ul li:last-child:hover {
color: #fff;
background: #20B2AA;
}
Проблема исправляется решением: window.createPagination = function createPagination(totalPages, page) но это использование глобальной переменной - что само по себе не хорошо... Какие есть варианты решения - подскажите пожалуйста!