<section class="max-md:pe-0 adjusted-marg-y-md flex flex-col gap-3" x-data="initSlider" x-init="calcPageSize(); $nextTick(function() { calcActive() })" @resize.window.debounce="calcPageSize(); $nextTick(() => calcActive())" role="group" aria-roledescription="Carousel">
<div class="flex md:grid grid-cols-3 gutter-quarter overflow-auto js_slides snap" @scroll.debounce="calcActive">
<a id="slide-0" aria-labelledby="tab-0" role="tabpanel" href="" class="bg-white hover:text-brand-700 transition-colors shrink-0 w-[85%] md:w-auto js_slide">
<div class="aspect-[3/2]">
<img class="w-full h-full object-cover" src="/img/blog/thumbnail-1.png" alt="">
</div>
<div class="p-4 h5 after:h-2 after:w-10 after:bg-brand after:block after:mt-5">
Gluconate de zinc : bienfaits et pouvoir matifiant
</div>
</a> <a id="slide-1" aria-labelledby="tab-1" role="tabpanel" href="" class="bg-white hover:text-brand-700 transition-colors shrink-0 w-[85%] md:w-auto js_slide">
<div class="aspect-[3/2]">
<img class="w-full h-full object-cover" src="/img/blog/thumbnail-2.png" alt="">
</div>
<div class="p-4 h5 after:h-2 after:w-10 after:bg-brand after:block after:mt-5">
Vieillissement de la peau du visage : nos astuces à partir de 40 ans
</div>
</a> <a id="slide-2" aria-labelledby="tab-2" role="tabpanel" href="" class="bg-white hover:text-brand-700 transition-colors shrink-0 w-[85%] md:w-auto js_slide">
<div class="aspect-[3/2]">
<img class="w-full h-full object-cover" src="/img/blog/thumbnail-1.png" alt="">
</div>
<div class="p-4 h5 after:h-2 after:w-10 after:bg-brand after:block after:mt-5">
Gluconate de zinc : bienfaits et pouvoir matifiant
</div>
</a> <a id="slide-3" aria-labelledby="tab-3" role="tabpanel" href="" class="bg-white hover:text-brand-700 transition-colors shrink-0 w-[85%] md:w-auto js_slide">
<div class="aspect-[3/2]">
<img class="w-full h-full object-cover" src="/img/blog/thumbnail-1.png" alt="">
</div>
<div class="p-4 h5 after:h-2 after:w-10 after:bg-brand after:block after:mt-5">
Gluconate de zinc : bienfaits et pouvoir matifiant
</div>
</a> <a id="slide-4" aria-labelledby="tab-4" role="tabpanel" href="" class="bg-white hover:text-brand-700 transition-colors shrink-0 w-[85%] md:w-auto js_slide">
<div class="aspect-[3/2]">
<img class="w-full h-full object-cover" src="/img/blog/thumbnail-1.png" alt="">
</div>
<div class="p-4 h5 after:h-2 after:w-10 after:bg-brand after:block after:mt-5">
Gluconate de zinc : bienfaits et pouvoir matifiant
</div>
</a> <a id="slide-5" aria-labelledby="tab-5" role="tabpanel" href="" class="bg-white hover:text-brand-700 transition-colors shrink-0 w-[85%] md:w-auto js_slide">
<div class="aspect-[3/2]">
<img class="w-full h-full object-cover" src="/img/blog/thumbnail-1.png" alt="">
</div>
<div class="p-4 h5 after:h-2 after:w-10 after:bg-brand after:block after:mt-5">
Gluconate de zinc : bienfaits et pouvoir matifiant
</div>
</a> <a id="slide-6" aria-labelledby="tab-6" role="tabpanel" href="" class="bg-white hover:text-brand-700 transition-colors shrink-0 w-[85%] md:w-auto js_slide">
<div class="aspect-[3/2]">
<img class="w-full h-full object-cover" src="/img/blog/thumbnail-1.png" alt="">
</div>
<div class="p-4 h5 after:h-2 after:w-10 after:bg-brand after:block after:mt-5">
Gluconate de zinc : bienfaits et pouvoir matifiant
</div>
</a> <a id="slide-7" aria-labelledby="tab-7" role="tabpanel" href="" class="bg-white hover:text-brand-700 transition-colors shrink-0 w-[85%] md:w-auto js_slide">
<div class="aspect-[3/2]">
<img class="w-full h-full object-cover" src="/img/blog/thumbnail-1.png" alt="">
</div>
<div class="p-4 h5 after:h-2 after:w-10 after:bg-brand after:block after:mt-5">
Gluconate de zinc : bienfaits et pouvoir matifiant
</div>
</a> <a id="slide-8" aria-labelledby="tab-8" role="tabpanel" href="" class="bg-white hover:text-brand-700 transition-colors shrink-0 w-[85%] md:w-auto js_slide">
<div class="aspect-[3/2]">
<img class="w-full h-full object-cover" src="/img/blog/thumbnail-1.png" alt="">
</div>
<div class="p-4 h5 after:h-2 after:w-10 after:bg-brand after:block after:mt-5">
Gluconate de zinc : bienfaits et pouvoir matifiant
</div>
</a> <a id="slide-9" aria-labelledby="tab-9" role="tabpanel" href="" class="bg-white hover:text-brand-700 transition-colors shrink-0 w-[85%] md:w-auto js_slide">
<div class="aspect-[3/2]">
<img class="w-full h-full object-cover" src="/img/blog/thumbnail-1.png" alt="">
</div>
<div class="p-4 h5 after:h-2 after:w-10 after:bg-brand after:block after:mt-5">
Gluconate de zinc : bienfaits et pouvoir matifiant
</div>
</a> <a id="slide-10" aria-labelledby="tab-10" role="tabpanel" href="" class="bg-white hover:text-brand-700 transition-colors shrink-0 w-[85%] md:w-auto js_slide">
<div class="aspect-[3/2]">
<img class="w-full h-full object-cover" src="/img/blog/thumbnail-1.png" alt="">
</div>
<div class="p-4 h5 after:h-2 after:w-10 after:bg-brand after:block after:mt-5">
Gluconate de zinc : bienfaits et pouvoir matifiant
</div>
</a> <a id="slide-11" aria-labelledby="tab-11" role="tabpanel" href="" class="bg-white hover:text-brand-700 transition-colors shrink-0 w-[85%] md:w-auto js_slide">
<div class="aspect-[3/2]">
<img class="w-full h-full object-cover" src="/img/blog/thumbnail-1.png" alt="">
</div>
<div class="p-4 h5 after:h-2 after:w-10 after:bg-brand after:block after:mt-5">
Gluconate de zinc : bienfaits et pouvoir matifiant
</div>
</a>
</div>
<div class="flex items-center justify-center py-6 mt-3 md:hidden">
<div role="tablist" aria-label="Navigation du slider" class="flex flex-wrap justify-center gap-3">
<template x-for="(index, i) in Math.ceil(itemCount / pageSize)" :key="i">
<button class="shrink-0 block h-1 bg-black rounded-full shadow cursor-pointer transition-all duration-300 ease-in-out" role="tab" :id="'tab-' + (index-1)" :aria-controls="'slide-' + (index-1)" :aria-selected="Math.floor(active/pageSize) === index-1" :tabindex="Math.floor(active/pageSize) === index-1 ? 0 : -1" :class="{
'bg-opacity-100 w-22': Math.floor(active/pageSize) === index-1,
'bg-opacity-40 w-6': Math.floor(active/pageSize) !== index-1
}" @click="scrollTo((index-1)*pageSize);">
<span class="sr-only" x-text="'Aller au groupe de slides ' + index"></span>
</button>
</template>
</div>
</div>
</section>
<script>
'use strict';
function initSlider() {
return {
active: 0,
itemCount: 0,
getSlider() {
return this.$root.querySelector('.js_slides');
},
pageSize: 4,
pageFillers: 0,
calcPageSize() {
const slider = this.getSlider();
if (slider) {
this.itemCount = slider.querySelectorAll('.js_slide').length;
this.pageSize = Math.round(slider.clientWidth / slider.querySelector('.js_slide').clientWidth);
this.pageFillers = (
this.pageSize * Math.ceil(this.itemCount / this.pageSize)
) - this.itemCount;
}
},
calcActive() {
const slider = this.getSlider();
if (slider) {
const sliderItems = this.itemCount + this.pageFillers;
const calculatedActiveSlide = slider.scrollLeft / (slider.scrollWidth / sliderItems);
this.active = Math.round(calculatedActiveSlide / this.pageSize) * this.pageSize;
}
},
scrollPrevious() {
this.scrollTo(this.active - this.pageSize);
},
scrollNext() {
this.scrollTo(this.active + this.pageSize);
},
scrollTo(idx) {
const slider = this.getSlider();
if (slider) {
const slideWidth = slider.scrollWidth / (this.itemCount + this.pageFillers);
slider.scrollLeft = Math.floor(slideWidth) * idx;
this.active = idx;
}
},
}
}
</script>
<section class="max-md:pe-0 adjusted-marg-y-md flex flex-col gap-3"
x-data="initSlider"
x-init="calcPageSize(); $nextTick(function() { calcActive() })"
@resize.window.debounce="calcPageSize(); $nextTick(() => calcActive())"
role="group"
aria-roledescription="Carousel"
>
<div class="flex md:grid grid-cols-3 gutter-quarter overflow-auto js_slides snap" @scroll.debounce="calcActive">
{% for article in articles %}
{% render '@blog-card' with {
title: article.title,
img: article.img,
index: loop.index0,
class: 'shrink-0 w-[85%] md:w-auto js_slide'
} %}
{% endfor %}
</div>
{% render '@slider-pagination' with {
class: 'justify-center py-6 mt-3 md:hidden'
} %}
</section>
<script>
'use strict';
function initSlider() {
return {
active: 0,
itemCount: 0,
getSlider() {
return this.$root.querySelector('.js_slides');
},
pageSize: 4,
pageFillers: 0,
calcPageSize() {
const slider = this.getSlider();
if (slider) {
this.itemCount = slider.querySelectorAll('.js_slide').length;
this.pageSize = Math.round(slider.clientWidth / slider.querySelector('.js_slide').clientWidth);
this.pageFillers = (
this.pageSize * Math.ceil(this.itemCount / this.pageSize)
) - this.itemCount;
}
},
calcActive() {
const slider = this.getSlider();
if (slider) {
const sliderItems = this.itemCount + this.pageFillers;
const calculatedActiveSlide = slider.scrollLeft / (slider.scrollWidth / sliderItems);
this.active = Math.round(calculatedActiveSlide / this.pageSize) * this.pageSize;
}
},
scrollPrevious() {
this.scrollTo(this.active - this.pageSize);
},
scrollNext() {
this.scrollTo(this.active + this.pageSize);
},
scrollTo(idx) {
const slider = this.getSlider();
if (slider) {
const slideWidth = slider.scrollWidth / (this.itemCount + this.pageFillers);
slider.scrollLeft = Math.floor(slideWidth) * idx;
this.active = idx;
}
},
}
}
</script>
{
"articles": [
{
"title": "Gluconate de zinc : bienfaits et pouvoir matifiant",
"img": {
"src": "/img/blog/thumbnail-1.png"
}
},
{
"title": "Vieillissement de la peau du visage : nos astuces à partir de 40 ans",
"img": {
"src": "/img/blog/thumbnail-2.png"
}
},
{
"title": "Gluconate de zinc : bienfaits et pouvoir matifiant",
"img": {
"src": "/img/blog/thumbnail-1.png"
}
},
{
"title": "Gluconate de zinc : bienfaits et pouvoir matifiant",
"img": {
"src": "/img/blog/thumbnail-1.png"
}
},
{
"title": "Gluconate de zinc : bienfaits et pouvoir matifiant",
"img": {
"src": "/img/blog/thumbnail-1.png"
}
},
{
"title": "Gluconate de zinc : bienfaits et pouvoir matifiant",
"img": {
"src": "/img/blog/thumbnail-1.png"
}
},
{
"title": "Gluconate de zinc : bienfaits et pouvoir matifiant",
"img": {
"src": "/img/blog/thumbnail-1.png"
}
},
{
"title": "Gluconate de zinc : bienfaits et pouvoir matifiant",
"img": {
"src": "/img/blog/thumbnail-1.png"
}
},
{
"title": "Gluconate de zinc : bienfaits et pouvoir matifiant",
"img": {
"src": "/img/blog/thumbnail-1.png"
}
},
{
"title": "Gluconate de zinc : bienfaits et pouvoir matifiant",
"img": {
"src": "/img/blog/thumbnail-1.png"
}
},
{
"title": "Gluconate de zinc : bienfaits et pouvoir matifiant",
"img": {
"src": "/img/blog/thumbnail-1.png"
}
},
{
"title": "Gluconate de zinc : bienfaits et pouvoir matifiant",
"img": {
"src": "/img/blog/thumbnail-1.png"
}
}
]
}
No notes defined.