Введение
В этом проекте вы научитесь реализовывать функциональность пагинации для списка курсов. Пагинация является важной функцией в фронтенд-разработке веб-приложений, и этот проект приведет вас пошагово через процесс получения данных из JSON-файла, отображения данных в виде страниц и обработки функциональности кнопок "Предыдущая" и "Следующая" страницы.
👀 Предпросмотр

🎯 Задачи
В этом проекте вы научитесь:
- Получать данные из JSON-файла с использованием библиотеки Axios
- Отображать данные о курсах в виде страниц, по 5 элементов на каждой странице
- Реализовывать функциональность кнопок "Предыдущая" и "Следующая" страницы
- Отключать кнопки "Предыдущая" и "Следующая" страницы при необходимости (на первой и последней странице)
- Обновлять отображение пагинации, чтобы показать текущий номер страницы и общее количество страниц
🏆 Достижения
После завершения этого проекта вы сможете:
- Получать данные из JSON-файла с использованием Axios
- Реализовывать функциональность пагинации для списка курсов
- Обрабатывать взаимодействия пользователя с кнопками "Предыдущая" и "Следующая" страницы
- Условно отключать кнопки в зависимости от текущей страницы
- Обновлять пользовательский интерфейс для отображения текущей страницы и общего количества страниц
Настройка структуры проекта
На этом этапе вы настроите файлы и структуру проекта. Следуйте шагам ниже, чтобы выполнить этот этап:
Откройте папку проекта. Структура каталогов выглядит следующим образом:
├── css
│ └── bootstrap.css
├── index.html
└── js
├── axios.js
├── carlist.json
└── index.js
В этой структуре:
css/bootstrap.css- это файл стилей Bootstrap, используемый в проекте.index.html- это главная веб-страница.js/carlist.json- это файл данных, необходимый для запроса.js/axios.js- это файл axios, используемый для запроса.js/index.js- это JavaScript-файл, который нужно завершить.
Нажмите кнопку Go Live в правом нижнем углу WebIDE, чтобы запустить проект.
Затем откройте "Web 8080" в верхней части виртуальной машины и вручную обновите страницу, и вы увидите страницу. Эффект выглядит следующим образом:

Получение данных из JSON-файла
На этом этапе вы научитесь получать данные из файла carlist.json и сохранять их в переменной data.
- Найдите файл
js/index.jsи найдите комментарий// TODO: Requesting data from the carlist.json file. - Используйте метод
axios.get()для получения данных из файла./js/carlist.json. - После получения данных сохраните их в переменной
data. - Вычислите максимальное количество страниц, разделив общее количество элементов на количество элементов на странице (5). Сохраните это значение в переменной
maxPage. - Вызовите функцию
showPagination()и передайте в качестве аргументовmaxPageиpageNum(которое по умолчанию установлено в 1), чтобы отобразить текущий номер страницы и общее количество страниц. - Вызовите функцию
getPageData()и передайте в качестве аргументаdata, чтобы получить данные для первой страницы (элементы 1 - 5). Сохраните это в переменнойpageData. - Вызовите функцию
renderHtml()и передайте в качестве аргументаpageData, чтобы отрендерить HTML для первой страницы.
Ваш код должен выглядеть следующим образом:
let data;
let pageData;
// TODO: Requesting data from the carlist.json file
axios.get("./js/carlist.json").then((res) => {
data = res.data;
maxPage = Math.ceil(data.length / 5);
showPagination(maxPage, pageNum);
pageData = getPageData(data);
renderHtml(pageData);
});
Реализация функциональности кнопки 'Предыдущая страница'
На этом этапе вы научитесь реализовывать функциональность кнопки "Предыдущая страница".
- Найдите обработчик события клика для кнопки "Предыдущая страница" (
prev.onclick). - Внутри обработчика события сначала удалите класс
disabledу кнопки "Следующая страница" (next.classList.remove("disabled")). - Уменьшите значение переменной
pageNumна 1, чтобы перейти на предыдущую страницу. - Если значение
pageNumменьше или равно 1, это означает, что мы находимся на первой странице, поэтому добавьте классdisabledк кнопке "Предыдущая страница" (this.classList.add("disabled")) и установите значениеpageNumравным 1. - Вызовите функцию
showPagination()и передайте в качестве аргументовmaxPageиpageNum, чтобы обновить отображение пагинации. - Вызовите функцию
getPageData()и передайте в качестве аргументаdata, чтобы получить данные для текущей страницы. Сохраните это в переменнойpageData. - Вызовите функцию
renderHtml()и передайте в качестве аргументаpageData, чтобы отрендерить HTML для текущей страницы.
Ваш код должен выглядеть следующим образом:
// Click on the previous page
let prev = document.getElementById("prev");
prev.onclick = function () {
// TODO
next.classList.remove("disabled");
pageNum--;
if (pageNum <= 1) {
this.classList.add("disabled");
pageNum = 1;
}
showPagination(maxPage, pageNum);
pageData = getPageData(data);
renderHtml(pageData);
};
Реализация функциональности кнопки 'Следующая страница'
На этом этапе вы научитесь реализовывать функциональность кнопки "Следующая страница".
- Найдите обработчик события клика для кнопки "Следующая страница" (
next.onclick). - Внутри обработчика события сначала удалите класс
disabledу кнопки "Предыдущая страница" (prev.classList.remove("disabled")). - Увеличьте значение переменной
pageNumна 1, чтобы перейти на следующую страницу. - Если значение
pageNumбольше или равноmaxPage, это означает, что мы находимся на последней странице, поэтому добавьте классdisabledк кнопке "Следующая страница" (this.classList.add("disabled")) и установите значениеpageNumравнымmaxPage. - Вызовите функцию
showPagination()и передайте в качестве аргументовmaxPageиpageNum, чтобы обновить отображение пагинации. - Вызовите функцию
getPageData()и передайте в качестве аргументаdata, чтобы получить данные для текущей страницы. Сохраните это в переменнойpageData. - Вызовите функцию
renderHtml()и передайте в качестве аргументаpageData, чтобы отрендерить HTML для текущей страницы.
Ваш код должен выглядеть следующим образом:
// Click on the next page
let next = document.getElementById("next");
next.onclick = function () {
// TODO
prev.classList.remove("disabled");
pageNum++;
if (pageNum >= maxPage) {
this.classList.add("disabled");
pageNum = maxPage;
}
showPagination(maxPage, pageNum);
pageData = getPageData(data);
renderHtml(pageData);
};
Теперь вы завершили реализацию функциональности пагинации для списка курсов. Вы можете протестировать функциональность, нажимая на кнопки "Предыдущая" и "Следующая" страницы, чтобы убедиться, что данные о курсах отображаются корректно.
GIF-анимация с выполненными функциями выглядит следующим образом:

Резюме
Поздравляем! Вы завершили этот проект. Вы можете выполнять больше лабораторных работ в LabEx, чтобы улучшить свои навыки.



