CarouselView
Diaporama pour mises en avant et annonces.
Description
Le composant CarouselView organise plusieurs diapositives de mise en avant, pour des bannières mobiles ou des séquences promotionnelles. Il convient aux contenus phares, aux annonces, aux promotions, ou à toute collection d'éléments à parcourir par balayage.
Chaque diapositive peut comporter :
- Titre et description
- Badge (facultatif)
- Image (facultative)
- Boutons d'action
Le carrousel prend en charge le défilement automatique, la lecture en boucle et des réglages d'affichage configurables.
Description des champs
idstringrequisIdentifiant unique de la vue carrousel
typestringrequisToujours
"Carousel"contentCarouselContentrequisObjet de contenu du carrousel
content.titlestringrequisTitre du carrousel (défini dans le constructeur)
content.subtitlestringoptionnelSous-titre facultatif
content.slidesCarouselSlide[]requisTableau de diapositives (au moins une requise)
content.slides[].idstringrequisIdentifiant unique de la diapositive
content.slides[].titlestringrequisTitre de la diapositive
content.slides[].descriptionstringoptionnelDescription de la diapositive
content.slides[].badgestringoptionnelTexte du badge (par exemple « New », « Featured »)
content.slides[].imageCardImageoptionnelImage de la diapositive
content.slides[].image.urlstringrequis*URL de l'image (requise si une image est définie)
content.slides[].image.altstringoptionnelTexte alternatif de l'image
content.slides[].actionsCardAction[]optionnelTableau de boutons d'action de la diapositive
content.slides[].actions[].textstringrequisTexte du bouton
content.slides[].actions[].methodHttpMethodoptionnelMéthode HTTP (par défaut : POST)
content.slides[].actions[].confirmMessagestringoptionnelBoîte de confirmation facultative
content.slides[].actions[].hrefstringoptionnelURL de lien facultative
content.slides[].actions[].iconstringoptionnelIdentifiant d'icône facultatif
content.slides[].actions[].variantstringoptionnelVariante du bouton :
"primary", "secondary", "link"content.slides[].metaRecord<string, unknown>optionnelMétadonnées facultatives de la diapositive
content.settingsCarouselSettingsoptionnelRéglages d'affichage du carrousel
content.settings.autoplaybooleanoptionnelActive le défilement automatique (par défaut : false)
content.settings.intervalMsnumberoptionnelIntervalle du défilement automatique, en millisecondes (par défaut : 6000)
content.settings.loopbooleanoptionnelActive la lecture en boucle (par défaut : true)
content.settings.showIndicatorsbooleanoptionnelAffiche les indicateurs de diapositive (par défaut : true)
processIdstringoptionnelIdentifiant de processus pour les parcours en plusieurs étapes
metadataobjectoptionnelMétadonnées de la vue (version, createdAt, author, tags)
Méthodes
setSubtitle(subtitle)→ thisDéfinit le sous-titre facultatif affiché sous le titre du carrousel
subtitle- Texte du sous-titre
setSettings(settings)→ thisRemplace le comportement par défaut du défilement automatique et des indicateurs
settings- Objet CarouselSettings
addSlide(slide)→ thisAjoute au carrousel une diapositive déjà construite
slide- Objet CarouselSlide
createSlide(id, title, description?, options?)→ CarouselSlideCrée un objet diapositive, sans l'ajouter au carrousel
id- Identifiant de la diapositivetitle- Titre de la diapositivedescription- Description facultativeoptions- Options de la diapositive (imageUrl, imageAlt, badge)
addSlideAction(slideId, text, method?, options?)→ thisAjoute un bouton d'action à une diapositive précise
slideId- Identifiant de la diapositivetext- Texte du boutonmethod- Méthode HTTP (par défaut : POST)options- Options de l'action (confirmMessage, href, icon, variant)
clearSlides()→ thisSupprime toutes les diapositives du carrousel
getContent()→ CarouselContentRetourne l'objet de contenu complet du carrousel
serve()→ Record<string, unknown>Sert la vue après validation (hérité de BaseView)
toJSON()→ Record<string, unknown>Retourne la représentation JSON (hérité de BaseView)
setState(key, value)→ voidDéfinit l'état de la vue (hérité de BaseView)
key- Clé d'étatvalue- Valeur d'état
getState(key)→ unknownLit l'état de la vue (hérité de BaseView)
key- Clé d'état
setNext(url)→ thisDéfinit la navigation vers la vue suivante (hérité de BaseView)
url- URL de la vue suivante
setPrev(url)→ thisDéfinit la navigation vers la vue précédente (hérité de BaseView)
url- URL de la vue précédente
setProcess(processId, context?)→ thisDéfinit le contexte de processus (hérité de BaseView)
processId- Identifiant du processuscontext- Contexte du processus
Exemples de code JavaScript
Carrousel simple
1import { YeriaApp } from '@numerum-tech/yeriasdk';
2
3const yeriaApp = new YeriaApp({ appId: 'my-app' });
4
5const carousel = yeriaApp
6 .createCarouselView('home-carousel', 'Featured')
7 .addSlide(
8 carousel.createSlide('release-2-0', 'Version 2.0', 'Discover new features', {
9 imageUrl: 'https://example.com/banners/release.jpg',
10 badge: 'New'
11 })
12 )
13 .addSlide(
14 carousel.createSlide('case-study', 'Case Study', 'How ACME doubled productivity', {
15 imageUrl: 'https://example.com/banners/case-study.jpg'
16 })
17 );
18
19const response = yeriaApp.serve(carousel);Carrousel avec défilement automatique
1const carousel = yeriaApp
2 .createCarouselView('promotions', 'Special Offers')
3 .setSubtitle('Limited time offers')
4 .addSlide(
5 carousel.createSlide('offer-1', 'Offer 1', 'Description 1', {
6 imageUrl: 'https://example.com/offer1.jpg',
7 badge: '50% Off'
8 })
9 )
10 .addSlide(
11 carousel.createSlide('offer-2', 'Offer 2', 'Description 2', {
12 imageUrl: 'https://example.com/offer2.jpg'
13 })
14 )
15 .setSettings({
16 autoplay: true,
17 intervalMs: 5000, // 5 seconds
18 loop: true,
19 showIndicators: true
20 });Carrousel avec actions
1const carousel = yeriaApp
2 .createCarouselView('featured', 'Featured Content')
3 .addSlide(
4 carousel.createSlide('article-1', 'Article 1', 'Read our latest article', {
5 imageUrl: 'https://example.com/article1.jpg'
6 })
7 )
8 .addSlide(
9 carousel.createSlide('article-2', 'Article 2', 'Another great read', {
10 imageUrl: 'https://example.com/article2.jpg'
11 })
12 )
13 .addSlideAction('article-1', 'Read More', 'GET', {
14 href: '/articles/1',
15 variant: 'primary'
16 })
17 .addSlideAction('article-2', 'Read More', 'GET', {
18 href: '/articles/2',
19 variant: 'primary'
20 });Carrousel avec plusieurs actions par diapositive
1const carousel = yeriaApp
2 .createCarouselView('products', 'Featured Products')
3 .addSlide(
4 carousel.createSlide('product-1', 'Product 1', 'Amazing product', {
5 imageUrl: 'https://example.com/product1.jpg',
6 badge: 'Popular'
7 })
8 );
9
10carousel
11 .addSlideAction('product-1', 'Buy Now', 'POST', {
12 confirmMessage: 'Add to cart?',
13 variant: 'primary'
14 })
15 .addSlideAction('product-1', 'View Details', 'GET', {
16 href: '/products/1',
17 variant: 'secondary'
18 })
19 .addSlideAction('product-1', 'Share', 'POST', { variant: 'link' });Carrousel avec objet diapositive complet
1const carousel = yeriaApp
2 .createCarouselView('announcements', 'Announcements')
3 .addSlide({
4 id: 'announcement-1',
5 title: 'New Feature',
6 description: 'We\'ve added a new feature',
7 badge: 'New',
8 image: {
9 url: 'https://example.com/announcement1.jpg',
10 alt: 'Announcement 1'
11 },
12 actions: [
13 {
14 text: 'Learn More',
15 method: 'GET',
16 href: '/features/new',
17 variant: 'primary'
18 }
19 ],
20 meta: {
21 category: 'feature',
22 priority: 'high'
23 }
24 });Carrousel avec réglages personnalisés
1const carousel = yeriaApp
2 .createCarouselView('banner', 'Banner')
3 .setSubtitle('Scroll through our content')
4 .addSlide(
5 carousel.createSlide('slide-1', 'Slide 1', 'First slide')
6 )
7 .addSlide(
8 carousel.createSlide('slide-2', 'Slide 2', 'Second slide')
9 )
10 .addSlide(
11 carousel.createSlide('slide-3', 'Slide 3', 'Third slide')
12 )
13 .setSettings({
14 autoplay: false, // Manual navigation only
15 loop: false, // Don't loop (stop at end)
16 showIndicators: true // Show dots
17 });Suppression des diapositives d'un carrousel
1const carousel = yeriaApp
2 .createCarouselView('dynamic-carousel', 'Dynamic Carousel')
3 .addSlide(
4 carousel.createSlide('slide-1', 'Slide 1', 'Description 1')
5 )
6 .addSlide(
7 carousel.createSlide('slide-2', 'Slide 2', 'Description 2')
8 );
9
10// Clear all slides
11carousel.clearSlides();
12
13// Add new slides
14carousel
15 .addSlide(
16 carousel.createSlide('new-slide-1', 'New Slide 1', 'New description 1')
17 )
18 .addSlide(
19 carousel.createSlide('new-slide-2', 'New Slide 2', 'New description 2')
20 );Carrousel dans un parcours en plusieurs étapes
1const carousel = yeriaApp
2 .createCarouselView('onboarding-steps', 'Get Started')
3 .setProcess('onboarding', {
4 processName: 'User Onboarding',
5 currentStep: 1,
6 totalSteps: 3
7 })
8 .setSubtitle('Learn about our features')
9 .addSlide(
10 carousel.createSlide('step-1', 'Step 1', 'Create your account', {
11 imageUrl: 'https://example.com/step1.jpg'
12 })
13 )
14 .addSlide(
15 carousel.createSlide('step-2', 'Step 2', 'Complete your profile', {
16 imageUrl: 'https://example.com/step2.jpg'
17 })
18 )
19 .addSlide(
20 carousel.createSlide('step-3', 'Step 3', 'Start using the app', {
21 imageUrl: 'https://example.com/step3.jpg'
22 })
23 )
24 .setSettings({
25 autoplay: true,
26 intervalMs: 4000,
27 loop: true,
28 showIndicators: true
29 });Exemple de carrousel complexe
1const carousel = yeriaApp
2 .createCarouselView('homepage-hero', 'Welcome')
3 .setSubtitle('Discover what we offer')
4 .addSlide(
5 carousel.createSlide('feature-1', 'Feature 1', 'Amazing feature description', {
6 imageUrl: 'https://example.com/feature1.jpg',
7 badge: 'New'
8 })
9 )
10 .addSlide(
11 carousel.createSlide('feature-2', 'Feature 2', 'Another great feature', {
12 imageUrl: 'https://example.com/feature2.jpg'
13 })
14 )
15 .addSlide(
16 carousel.createSlide('feature-3', 'Feature 3', 'Yet another feature', {
17 imageUrl: 'https://example.com/feature3.jpg',
18 badge: 'Popular'
19 })
20 )
21 .addSlideAction('feature-1', 'Try Now', 'POST', { variant: 'primary' })
22 .addSlideAction('feature-1', 'Learn More', 'GET', {
23 href: '/features/1',
24 variant: 'secondary'
25 })
26 .addSlideAction('feature-2', 'Get Started', 'POST', { variant: 'primary' })
27 .addSlideAction('feature-3', 'Explore', 'GET', {
28 href: '/features/3',
29 variant: 'primary'
30 })
31 .setSettings({
32 autoplay: true,
33 intervalMs: 5000,
34 loop: true,
35 showIndicators: true
36 });Exemple JSON complet
1{
2 "id": "home-carousel",
3 "type": "Carousel",
4 "content": {
5 "title": "Featured Content",
6 "subtitle": "Scroll through our highlights",
7 "slides": [
8 {
9 "id": "release-2-0",
10 "title": "Version 2.0",
11 "description": "Discover the new features",
12 "image": {
13 "url": "https://cdn.example.com/banners/release.jpg",
14 "alt": "Version 2.0 Release"
15 },
16 "badge": "New",
17 "actions": [
18 {
19 "code": "read-more",
20 "title": "Read More",
21 "method": "GET",
22 "href": "/blog/version-2-0",
23 "variant": "link"
24 }
25 ]
26 },
27 {
28 "id": "case-study",
29 "title": "Case Study",
30 "description": "How ACME doubled productivity",
31 "image": {
32 "url": "https://cdn.example.com/banners/case-study.jpg",
33 "alt": "Case Study"
34 },
35 "actions": [
36 {
37 "code": "view-case-study",
38 "title": "View Case Study",
39 "method": "GET",
40 "href": "/case-studies/acme",
41 "variant": "primary"
42 }
43 ]
44 },
45 {
46 "id": "tutorial",
47 "title": "Tutorial",
48 "description": "Learn the basics in 5 minutes",
49 "image": {
50 "url": "https://cdn.example.com/banners/tutorial.jpg",
51 "alt": "Tutorial"
52 },
53 "actions": [
54 {
55 "code": "start-tutorial",
56 "title": "Start Tutorial",
57 "method": "POST",
58 "variant": "primary"
59 }
60 ]
61 }
62 ],
63 "settings": {
64 "autoplay": true,
65 "intervalMs": 5000,
66 "loop": true,
67 "showIndicators": true
68 }
69 },
70 "metadata": {
71 "version": "1.0.0",
72 "createdAt": "2025-01-28T10:00:00.000Z"
73 }
74}