[К содержанию](../readme.md#введение-в-web-разработку)
# Карусель
## АПИ "Управление коллекцией фильмов"
Для получения списка фильмов (и их изображений) можно использовать АПИ "Управление коллекцией фильмов"
Для получения списка фильмов используйте метод:
```rest
GET https://cinema.kolei.ru/movies?filter=new
```
в ответ получите JSON-массив:
```json
[
{
"movieId": 1,
"name": "Дюна",
"description": "Атрейдесы прибывают на планету, где им никто не рад. Фантастический эпос Дени Вильнёва с шестью «Оскарами»",
"age": "12",
"images": [
"duna_wallpaper.jpg"
],
"poster": "duna.webp",
"tags": [],
"category": "Фентези"
},
...
]
```
Для получения картинки используйте УРЛ `https://cinema.kolei.ru/up/images/<название картинки из поля poster>`, например:
```rest
GET https://cinema.kolei.ru/up/images/duna.webp
```
## Задание
На примере карусели разберёмся, как подключать дополнительные js-библиотеки
Будем использовать [библиотеку **Swiper**](https://swiperjs.com/element) (можете и сами что-то написать или найти похожее)
1. Установка библиотеки
Для **Swiper** есть NPM-пакет, установим его командой:
```bash
npm install swiper
```
1. В компоненте, в котором вы будете использовать карусель, необходимо зарегистрировать компонент карусели
```js
```
>В доке ещё описан альтернативный вариант загрузки скрипта карусели из CDN. Если хотите использовать этот вариант, то скрипт нужно прописать в заголовок `index.html`
>
>Собственно первый вариант и делает динамическую загрузку js-скрипта, только не из CDN, а из локального пакета
1. [Использование компонента карусели](https://swiperjs.com/element#usage-with-vue)
Можете попытаться разобраться сами, у компонента много разных настроек. Я ниже приведу вариант для карусели постеров (стили тут условные, вам под свою вёрстку надо будет поправить)
```vue
{{ activeFilmName }}
```
В примере я не показываю реализацию метода `api.loadFilms`, это вы должны будете реализовать самостоятельно в рамках практического занятия
При установке внешних компонентов в консоли могут появиться **предупреждения**:
```
Failed to resolve component: swiper-slide
If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.
```
На работоспособность они не влияют, но засоряют консоль. Чтобы сказать **vue**, чтобы он не обращал внимания на такие компоненты нужно в настройках (`vite.config.js`) добавить исключения:
```js
export default defineConfig({
plugins: [
vue({
template: {
compilerOptions: {
isCustomElement: (tag) => ['swiper-slide','swiper-container'].includes(tag),
}
}
}),
vueDevTools(),
],
```
[Назад](./web_17.md) | [Дальше](./web_19.md)