Fancyapps не работает
Пытаюсь запустить слайдер с помощью плагина Fancyapps через CDN. Через npm не вариант, backend мне не доступен. https://codepen.io/migal4/pen/jOJvqgr - то, что у меня сейчас.
const productCarousel = new Carousel(
document.getElementById('productCarousel'),
{
transition: 'slide',
preload: 3, // Smoother navigation when using lazy loaded images
Dots: false,
Thumbs: {
type: 'classic',
Carousel: {
dragFree: false,
slidesPerPage: 'auto',
Navigation: true,
axis: 'x',
breakpoints: {
'(min-width: 768px)': {
axis: 'y',
},
},
},
},
},
{ Thumbs }
);
Fancybox.bind('[data-fancybox="gallery"]', {
compact: false,
idle: false,
dragToClose: false,
contentClick: () =>
window.matchMedia('(max-width: 578px), (max-height: 578px)').matches
? 'toggleMax'
: 'toggleCover',
animated: false,
showClass: false,
hideClass: false,
Hash: false,
Thumbs: false,
Toolbar: {
display: {
left: [],
middle: [],
right: ['close'],
},
},
Carousel: {
transition: 'fadeFast',
preload: 3,
},
Images: {
zoom: false,
Panzoom: {
panMode: 'mousemove',
mouseMoveFactor: 1.1,
},
},
});
https://stackblitz.com/edit/js-8zg2gb?file=index.html,index.js,style.css - то, что я хочу получить. Код один в один одинаковый, но результат отличается. Как заставить слайдер заработать?
Ответы (1 шт):
Автор решения: Daniil Loban
→ Ссылка
Вставлю ответ целиком html чтобы было видно что он рабочий. Основное решение было в том чтобы найти и подключить все нужные скрипты и стили, и еще оказалось нужен tailwind который я тоже подключил. После этого вставил кастомные стили, разметку и js код для инициализации.
(открывать на всю страницу)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
</head>
<body>
<script src="https://cdn.tailwindcss.com"></script>
<script src=" https://cdn.jsdelivr.net/npm/@fancyapps/[email protected]/dist/fancybox/fancybox.umd.min.js "></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/[email protected]/dist/carousel/carousel.css"/>
<link href=" https://cdn.jsdelivr.net/npm/@fancyapps/[email protected]/dist/fancybox/fancybox.min.css " rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/[email protected]/dist/carousel/carousel.thumbs.css"/>
<script src="https://cdn.jsdelivr.net/npm/@fancyapps/[email protected]/dist/carousel/carousel.thumbs.umd.js"></script>
<style type="text/css">
#productContainer {
--product-view-height: 680px;
}
#productContainer .f-thumbs.is-classic.is-vertical {
height: var(--product-view-height, 100%);
}
/*
Thumbnails
*/
.f-thumbs.is-classic {
--f-thumb-width: 90px;
--f-thumb-height: 135px;
--f-thumb-gap: 0.5rem;
--f-thumb-opacity: 1;
--f-thumb-selected-opacity: 0.2;
--f-button-color: #0d0c22;
--f-button-hover-color: #ff3520;
--f-button-bg: #fff;
--f-button-hover-bg: #fff;
--f-button-active-bg: #fff;
}
.f-thumbs.is-classic .f-thumbs__slide__img {
object-fit: contain;
}
.f-thumbs.is-classic .f-carousel__nav .f-button[disabled] {
display: none;
}
/*
Main carousel
*/
#productCarousel {
--f-carousel-spacing: 0;
--f-button-width: 48px;
--f-button-height: 48px;
--f-button-border-radius: 0;
--f-button-color: #0d0c22;
--f-button-hover-color: #ff3520;
--f-button-bg: #fff;
--f-button-hover-bg: #fff;
--f-button-active-bg: #fff;
--f-button-svg-width: 28px;
--f-button-svg-height: 28px;
--f-button-svg-stroke-width: 1;
--f-button-svg-filter: none;
height: var(--product-view-height);
}
#productCarousel .f-carousel__slide {
display: flex;
justify-content: center;
align-items: center;
height: 100%;
}
#productCarousel .f-carousel__slide img {
width: 100%;
height: 100%;
object-fit: cover;
}
#productCarousel .f-carousel__nav {
opacity: 0;
transition: opacity 0.15s;
}
@media (hover: hover) {
#productCarousel:hover .f-carousel__nav {
opacity: 1;
}
}
/*
Fancybox
*/
.fancybox__container {
--fancybox-color: #0d0c22;
--fancybox-bg: #fff;
--f-spinner-color-1: rgba(0, 0, 0, 0.1);
--f-spinner-color-2: rgba(17, 24, 28, 0.8);
}
.fancybox__toolbar,
.fancybox__nav {
--f-button-width: 60px;
--f-button-height: 60px;
--f-button-border-radius: 0;
--f-button-color: #0d0c22;
--f-button-hover-color: #ff3520;
--f-button-bg: #fff;
--f-button-hover-bg: #fff;
--f-button-active-bg: #fff;
--f-button-svg-width: 32px;
--f-button-svg-height: 32px;
--f-button-svg-stroke-width: 1;
--f-button-svg-filter: none;
}
.fancybox__nav {
--f-button-next-pos: 0;
--f-button-prev-pos: 0;
}
</style>
<div id="app" class="p-4">
<h1 class="mb-2 md:mb-4 font-semibold text-xl">
Responsive Carousel Thumbnails
</h1>
<p class="mb-4 md:hidden">
<a
href="https://js-8zg2gb.stackblitz.io"
target="_blank"
class="underline underline-offset-2"
>View this demo in full size</a
>
</p>
<div
id="productContainer"
class="
mb-14
md:max-w-lg
grid
gap-2
md:grid-cols-[106px_minmax(0px,_1fr)]
"
>
<div id="productCarousel" class="f-carousel md:order-last">
<div
class="f-carousel__slide"
data-thumb-src="https://fancyapps.com/img/dress_1_s.jpg"
data-fancybox="gallery"
data-src="https://fancyapps.com/img/dress_1_b.jpg"
>
<img
alt=""
data-lazy-src="https://fancyapps.com/img/dress_1_m.jpg"
/>
</div>
<div
class="f-carousel__slide"
data-thumb-src="https://fancyapps.com/img/dress_2_s.jpg"
data-fancybox="gallery"
data-src="https://fancyapps.com/img/dress_2_b.jpg"
>
<img
alt=""
data-lazy-src="https://fancyapps.com/img/dress_2_m.jpg"
/>
</div>
<div
class="f-carousel__slide"
data-thumb-src="https://fancyapps.com/img/dress_3_s.jpg"
data-fancybox="gallery"
data-src="https://fancyapps.com/img/dress_3_b.jpg"
>
<img
alt=""
data-lazy-src="https://fancyapps.com/img/dress_3_m.jpg"
/>
</div>
<div
class="f-carousel__slide"
data-thumb-src="https://fancyapps.com/img/dress_4_s.jpg"
data-fancybox="gallery"
data-src="https://fancyapps.com/img/dress_4_b.jpg"
>
<img
alt=""
data-lazy-src="https://fancyapps.com/img/dress_4_m.jpg"
/>
</div>
<div
class="f-carousel__slide"
data-thumb-src="https://fancyapps.com/img/dress_5_s.jpg"
data-fancybox="gallery"
data-src="https://fancyapps.com/img/dress_5_b.jpg"
>
<img
alt=""
data-lazy-src="https://fancyapps.com/img/dress_5_m.jpg"
/>
</div>
<div
class="f-carousel__slide"
data-thumb-src="https://fancyapps.com/img/dress_6_s.jpg"
data-fancybox="gallery"
data-src="https://fancyapps.com/img/dress_6_b.jpg"
>
<img
alt=""
data-lazy-src="https://fancyapps.com/img/dress_6_m.jpg"
/>
</div>
</div>
</div>
<p>
<a
href="https://fancyapps.com/"
target="_blank"
class="underline underline-offset-2"
>fancyapps.com</a
>
</p>
</div>
<script type="text/javascript">
const productCarousel = new Carousel(
document.getElementById('productCarousel'),
{
transition: 'slide',
preload: 3, // Smoother navigation when using lazy loaded images
Dots: false,
Thumbs: {
type: 'classic',
Carousel: {
dragFree: false,
slidesPerPage: 'auto',
Navigation: true,
axis: 'x',
breakpoints: {
'(min-width: 768px)': {
axis: 'y',
},
},
},
},
},
{ Thumbs }
);
Fancybox.bind('[data-fancybox="gallery"]', {
compact: false,
idle: false,
dragToClose: false,
contentClick: () =>
window.matchMedia('(max-width: 578px), (max-height: 578px)').matches
? 'toggleMax'
: 'toggleCover',
animated: false,
showClass: false,
hideClass: false,
Hash: false,
Thumbs: false,
Toolbar: {
display: {
left: [],
middle: [],
right: ['close'],
},
},
Carousel: {
transition: 'fadeFast',
preload: 3,
},
Images: {
zoom: false,
Panzoom: {
panMode: 'mousemove',
mouseMoveFactor: 1.1,
},
},
});
</script>
</body>
</html>