<div class="card-carousel">
<div class="swiper-container card-carousel__container">
<div class="swiper-wrapper">
<div class="swiper-slide card-carousel__item">
<div class="card card--image">
<a href="#" class="card__cta">
<figure class="card__figure">
<img src="/mocks/img/office-coders.jpg" alt="" class="card__image">
</figure>
<div class="card__body">
<h4 class="card__title">
Swegon engagerar sig i Sweden Green Building Council
</h4>
<p class="card__date">10 september 2020</p>
<p class="card__description">Som ett led i sitt fortsatta hållbarhetsarbete har Swegon valt att gå med i Sweden Green Building Council (SGBC).</p>
</div>
</a>
</div>
</div>
<div class="swiper-slide card-carousel__item">
<div class="card card--image">
<a href="#" class="card__cta">
<figure class="card__figure">
<img src="/mocks/img/conference-room.jpg" alt="" class="card__image">
</figure>
<div class="card__body">
<h4 class="card__title">
Stilren design och hög prestanda med nya KITE Ceiling
</h4>
<p class="card__date">07 september 2020</p>
<p class="card__description">Swegons nya luftdon levererar på många plan. Under utvecklingen av KITE Ceiling har bl.a. prestanda, design, installation och underhåll varit i fokus.</p>
</div>
</a>
</div>
</div>
<div class="swiper-slide card-carousel__item">
<div class="card card--image">
<a href="#" class="card__cta">
<figure class="card__figure">
<img src="/mocks/img/office-coders.jpg" alt="" class="card__image">
</figure>
<div class="card__body">
<h4 class="card__title">
Swegon engagerar sig i Sweden Green Building Council
</h4>
<p class="card__date">10 september 2020</p>
<p class="card__description">Som ett led i sitt fortsatta hållbarhetsarbete har Swegon valt att gå med i Sweden Green Building Council (SGBC).</p>
</div>
</a>
</div>
</div>
<div class="swiper-slide card-carousel__item">
<div class="card card--image">
<a href="#" class="card__cta">
<figure class="card__figure">
<img src="/mocks/img/conference-room.jpg" alt="" class="card__image">
</figure>
<div class="card__body">
<h4 class="card__title">
Stilren design och hög prestanda med nya KITE Ceiling
</h4>
<p class="card__date">07 september 2020</p>
<p class="card__description">Swegons nya luftdon levererar på många plan. Under utvecklingen av KITE Ceiling har bl.a. prestanda, design, installation och underhåll varit i fokus.</p>
</div>
</a>
</div>
</div>
</div>
</div>
<div class="card-carousel__scrollbar">
<div class="card-carousel__scrollbar-drag"></div>
</div>
<div class="card-carousel__navigation">
<button class="card-carousel__prev">
<svg class="icon " focusable="false">
<use xlink:href="#icon-slider-arrow"></use>
</svg>
</button>
<button class="card-carousel__next">
<svg class="icon " focusable="false">
<use xlink:href="#icon-slider-arrow"></use>
</svg>
</button>
</div>
</div>
<div class="card-carousel">
<div class="swiper-container card-carousel__container">
<div class="swiper-wrapper">
{{#each items}}
<div class="swiper-slide card-carousel__item">
{{> @card this}}
</div>
{{/each}}
</div>
</div>
<div class="card-carousel__scrollbar">
<div class="card-carousel__scrollbar-drag"></div>
</div>
<div class="card-carousel__navigation">
<button class="card-carousel__prev">
{{> @icon id="slider-arrow"}}
</button>
<button class="card-carousel__next">
{{> @icon id="slider-arrow"}}
</button>
</div>
</div>
{
"items": [
{
"modifiers": "image",
"title": "Swegon engagerar sig i Sweden Green Building Council",
"description": "Som ett led i sitt fortsatta hållbarhetsarbete har Swegon valt att gå med i Sweden Green Building Council (SGBC).",
"href": "#",
"date": "10 september 2020",
"image": {
"src": "/mocks/img/office-coders.jpg",
"alt": ""
}
},
{
"modifiers": "image",
"title": "Stilren design och hög prestanda med nya KITE Ceiling",
"description": "Swegons nya luftdon levererar på många plan. Under utvecklingen av KITE Ceiling har bl.a. prestanda, design, installation och underhåll varit i fokus.",
"href": "#",
"date": "07 september 2020",
"image": {
"src": "/mocks/img/conference-room.jpg",
"alt": ""
}
},
{
"modifiers": "image",
"title": "Swegon engagerar sig i Sweden Green Building Council",
"description": "Som ett led i sitt fortsatta hållbarhetsarbete har Swegon valt att gå med i Sweden Green Building Council (SGBC).",
"href": "#",
"date": "10 september 2020",
"image": {
"src": "/mocks/img/office-coders.jpg",
"alt": ""
}
},
{
"modifiers": "image",
"title": "Stilren design och hög prestanda med nya KITE Ceiling",
"description": "Swegons nya luftdon levererar på många plan. Under utvecklingen av KITE Ceiling har bl.a. prestanda, design, installation och underhåll varit i fokus.",
"href": "#",
"date": "07 september 2020",
"image": {
"src": "/mocks/img/conference-room.jpg",
"alt": ""
}
}
],
"showMoreLink": {
"label": "View all News",
"href": "#",
"icon": "chevron-right"
}
}
import Swiper from 'swiper';
const createCardCarousel = (el) => {
const container = el.querySelector('.card-carousel__container');
let carousel;
const attachNavigation = () => {
const prevButton = el.querySelector('.card-carousel__prev');
const nextButton = el.querySelector('.card-carousel__next');
if (prevButton) {
prevButton.addEventListener('click', () => {
carousel.slidePrev();
});
}
if (nextButton) {
nextButton.addEventListener('click', () => {
carousel.slideNext();
});
}
};
const init = () => {
const items = container.querySelectorAll('.card-carousel__item');
const itemCount = items.length;
const getMaxSlidesPerView = (breakpoint) => {
let defaultSlides;
switch (breakpoint) {
case 320:
defaultSlides = 1.2;
break;
case 640:
defaultSlides = 2.2;
break;
case 1024:
defaultSlides = 3.2;
break;
case 1440:
defaultSlides = 4.2;
break;
default:
defaultSlides = 1.2;
}
if (itemCount <= Math.floor(defaultSlides)) {
return itemCount;
}
return defaultSlides;
};
carousel = new Swiper(container, {
slidesPerView: 'auto',
spaceBetween: 16,
centeredSlides: false,
scrollbar: {
el: el.querySelector('.card-carousel__scrollbar'),
draggable: true,
dragClass: 'card-carousel__scrollbar-drag'
},
breakpoints: {
320: {
slidesPerView: getMaxSlidesPerView(320)
},
640: {
slidesPerView: getMaxSlidesPerView(640)
},
1024: {
slidesPerView: getMaxSlidesPerView(1024)
},
1440: {
slidesPerView: getMaxSlidesPerView(1440)
}
}
});
attachNavigation();
};
// Initialize
init();
};
export default createCardCarousel;
.card-carousel {
display: flex;
flex-wrap: wrap;
.panel & {
margin-left: size(-2);
width: calc(100% + #{size(4)});
}
}
.card-carousel__container {
.panel & {
padding: 0 size(2);
}
}
.card-carousel__scrollbar {
width: 100%;
height: 4px;
margin-top: 8px;
position: relative;
.panel & {
padding-left: size(2);
width: calc(100% + #{size(-4)});
}
&::before {
content: "";
display: block;
position: absolute;
top: 50%;
height: 2px;
width: 100%;
transform: translateY(-50%);
background: rgba(0, 0, 0, 0.1);
}
}
.card-carousel__scrollbar-drag {
background: $color-green-dark;
height: 100%;
}
.card-carousel__navigation {
width: 100%;
display: flex;
justify-content: flex-end;
position: relative;
}
.card-carousel__next,
.card-carousel__prev {
width: size(8);
height: size(8);
}
.card-carousel__next,
.card-carousel__prev {
color: $color-gray-4;
z-index: 3;
position: relative;
svg {
width: size(3);
height: size(3);
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
}
.card-carousel__prev {
transform: rotate(180deg);
}
import CardCarousel from './CardCarousel';
const els = document.querySelectorAll('.card-carousel');
for (let el of els) {
new CardCarousel(el);
}
No notes defined.