slick
angular-carousel
slidesjs
unslider
Avantages
Inconvénients
=> Responsive géré en js = Tailles des vignnettes calculée en px
Utiliser une configuration SASS/CSS
pour la gestion du responsive
Utiliser les translate3d pour déplacer les éléments (utilisation du GPU)
Utiliser React pour profiter du virtual DOM et réduire au maximum les re-layouts
$carousel: (
ratios:(
"16_9":(
tablet:(
breakpoint: 1285px,
numberItem: 3,
aspectRatio: 16 9
),
desktop:(
breakpoint: 1600px,
numberItem: 4,
aspectRatio: 16 9
)
),
"3_4":(
tablet:(
breakpoint: 1190px,
numberItem: 5,
aspectRatio: 3 4
),
desktop:(
breakpoint: 1681px,
numberItem: 7,
aspectRatio: 3 4
)
)
)
) !default;
width: 25%
width: 25%
overflow-x: visible
Aucun calcul JS à ce niveau
Récupérer la dernière page
window.getComputedStyle(node, ':before');
@each $ratio in map-keys(map-get($carousel, ratios)) {
.dedcarousel--ratio#{$ratio} {
&:before {
content: "#{map-deep-get($carousel, ratios, $ratio, wide, numberItem)}";
}
}
}
Niveau SASS
Niveau JS
Eviter de multiplier les listeners
class Carousel extends React.Component {
/* Each caroussel instance calls it */
static addInstance(carousel) {
if(!Carousel._instances.length) {
window.addEventListener('resize', Carousel.onViewportChange);
window.addEventListener('orientationchange', Carousel.onViewportChange);
}
Carousel._instances.push(carousel);
}
/* Called only once (even if several instances) */
static onViewportChange(e) {
Carousel._instances.forEach(function(instance) {
if(instance.onViewportChange) instance.onViewportChange();
});
}
/* For each carousel */
onViewportChange() {
// operations here
}
}
Carousel._instances = [];