Bonjour à tous,
J’espère être dans la bonne section
Je me permets de poster ici, je débute dans le JS, après plusieurs recherches sur internet je n'ai pas vraiment trouver de code pour un carrousel en JS (je suis peut-être passé à coté).
Bref, j'ai trouvé un vieux code JS que j'ai voulu adapter, mon problème et qu'il ne s'adapte pas très bien lorsque je réduit la fenêtre de navigation, mais si j'actualise la page il n'y a plus de problème.
Je ne vois pas d'où vient de problème exactement mais ça viendrait du JS, j'ai bien checké le CSS ça ne vient pas de là, voici les codes HTML, CSS et JS :
Mon code sur codepen.io codepen.io/Connerieman/pen/PoLrPbN
Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 <html lang="fr"> <head> <meta charset="UTF-8"> <title>TITRE</title> <link rel="stylesheet" type="text/css" href="CSS/Carrousel-Cliquable-Défilement.css"> <script src="JS/Carrousel-Cliquable-Défilement.js" defer></script> </head> <body> <div class="carrousel"> <div class="cadre"> <img class="fleche precedant" src="https://cypherspirit.fr/SVG/Chevron.svg" onclick="changerSlide('precedant')" /> <div class="diaporama"> <a href=""><img src="https://cypherspirit.fr//IMG/TEST/slide-1.jpg"/></a> <a href=""><img src="https://cypherspirit.fr//IMG/TEST/slide-2.jpg"/></a> <a href=""><img src="https://cypherspirit.fr//IMG/TEST/slide-3.jpg"/></a> <a href=""><img src="https://cypherspirit.fr//IMG/TEST/slide-4.jpg"/></ a> <a href=""><img src="https://cypherspirit.fr//IMG/TEST/slide-5.jpg"/></a> </div> <img class="fleche suivant" src="https://cypherspirit.fr/SVG/Chevron.svg" onclick="changerSlide('suivant')" /> </div> <span class="point"></span> <span class="point"></span> <span class="point"></span> <span class="point"></span> </div> </body> </html>
Code CSS : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108 html, body {height: 100%; /*hauteur*/} body { width: 100%; /*largeur*/ margin: 0; /*marge extérieur*/ padding: 0; /*marge intérieur*/ display: flex; /*apparition des balises :block, inline, inline-block, flex, grid, none*/ flex-direction: column; /*direction des balises :column, column-reverse, row, row-reverse*/ } /*----------------CARROUSEL----------------*/ .carrousel { width: 100%; /*largeur*/ margin: 80px auto; /*marge extérieur*/ padding: 0; /*marge intérieur*/ text-align: center; /*alignement : left, right, center, justify*/ } .cadre { margin: 0; /*marge extérieur*/ padding: 0; /*marge intérieur*/ display: flex; /*apparition des balises :block, inline, inline-block, flex, grid, none*/ justify-content: center; /*centre horizontalement le contenu*/ } .diaporama { width: 100%; /*largeur*/ max-width: 1100px; /*largeur maximum*/ max-height: 700px; /*hauteur maximum*/ margin: 0; /*marge extérieur*/ padding: 0; /*marge intérieur*/ display: flex; /*apparition des balises :block, inline, inline-block, flex, none*/ overflow: hidden; /*dépassement du contenant : visible, hidden, clip, scroll, auto*/ } .diaporama a { width: 100%; /*largeur*/ margin: 0; /*marge extérieur*/ padding: 0; /*marge intérieur*/ position: relative; /*type de positionnement*/ text-decoration: none; /*texte decoration*/ flex-shrink: 0; /*reduction du contenant*/ transition: transform 0.5s ease; /*transition*/ transform: translateX(-100%);/**/ } .diaporama img { width: 100%; /*largeur*/ height: 100%; /*hauteur*/ object-fit: cover; /*ajuster à la taille de son contenant*/ object-position: center; /*position du contenu*/ } /*----------------FLÈCHE----------------*/ .cadre:hover .fleche { opacity: 1; /*opacité*/ } .fleche { width: 125px; /*largeur maximum*/ margin: 0; /*marge extérieur*/ padding: 0; /*marge intérieur*/ user-select: none; /*opération de sélection*/ flex-shrink: 0; /*reduction du contenant*/ opacity: 1; /*opacité*/ cursor: pointer; /*type de curseur : default, pointer, help, wait, crosshair, not-allowed, zoom-in, grab, etc...*/ transition: all 0.5s ease; /* Ajoutez une transition*/ color: blue; /*couleur de la flèche*/ z-index: 3; } .fleche:hover { color: red; /*couleur de la flèche*/ } .suivant { transform: scaleX(-1) /*transforme*/ } /*----------------POINT----------------*/ .point { width: 15px; /*largeur*/ height: 15px; /*hauteur*/ margin: 20px 7px 16px 7px; /*marge extérieur*/ border-radius: 50%; /*bordure arrondi*/ display: inline-block; /*apparition des balises :block, inline, inline-block, flex, grid, none*/ cursor: pointer; /*type de curseur : default, pointer, help, wait, crosshair, not-allowed, zoom-in, grab, etc...*/ transition: all 0.5s ease; /*temps de changement*/ background-color: blue; /*couleur non selectionner*/ } .point:hover { box-shadow: 0px 0px 20px 4px rgb(0, 0, 255); /*couleur de l'ombre*/ } .point.active { background-color: red; /*couleur selectionner*/ } .point.active:hover { box-shadow: 0px 0px 20px 4px rgb(255, 0, 0); /*couleur de l'ombre*/ }
Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 /* Variable */ const diaporama = document.querySelector('.diaporama'); const slides = document.querySelectorAll(".diaporama a") let largeur = diaporama.offsetWidth; // problème console.log('largeur :' ,largeur); let index = 0; let transition = []; let transitionTerminer = true; // initialisation du carrousel for (let i = 0; i < slides.length; i++) { transition[i] = -largeur; slides[i].addEventListener("transitionend", () => transitionTerminer = true, true); } // mise à jour de la variable en fonction de la taille de la fenêtre window.addEventListener('resize', () => { largeur = diaporama.offsetWidth; for (let i = 0; i < slides.length; i++) { transition[i] = -largeur; } }); // déplacement de la dernière slide en première position diaporama.insertBefore(document.querySelector(".diaporama a:last-child"), slides[0]); // fonction pour changer de slide function changerSlide(direction) { if (transitionTerminer) { transitionTerminer = false; if (direction === 'suivant') { transitionTerminer = false; // index de la position actuelle let interieur = index % slides.length; // ajoute 1 à l'index index++; // manipuler chaque élément individuellement document.querySelectorAll(".diaporama a").forEach((a, i) => { // rend visible a.style.opacity = '1'; // transistion a.style.transform = `translateX(${transition[i] - largeur}px)`; // mets à jour de la position de chaque slide dans le carrousel transition[i] -= largeur; }); // élément extérieure de la vue du carrousel let exterieur = document.querySelectorAll(".diaporama a")[interieur]; // transistion exterieur.style.transform = `translateX(${transition[interieur] + (largeur * slides.length)}px)`; // rend invisible exterieur.style.opacity = '0'; // met à jour la position de l'élément extérieure lors de la transition transition[interieur] += largeur * slides.length; } else if (direction === 'precedant') { // retire 1 à l'index ou passe à la position du dernier élément index = (index === 0) ? slides.length - 1 : index - 1; // index de la position actuelle let interieur = index % document.querySelectorAll(".diaporama a").length; // manipuler chaque élément individuellement document.querySelectorAll(".diaporama a").forEach((a, i) => { a.style.opacity = '1'; // transistion a.style.transform = `translateX(${transition[i] + largeur}px)`; // mets à jour de la position de chaque slide dans le carrousel transition[i] += largeur; }); // élément dehors de la vue du carrousel let exterieur = document.querySelectorAll(".diaporama a")[interieur]; // transistion exterieur.style.transform = `translateX(${transition[interieur] - (largeur * slides.length)}px)`; // rend invisible exterieur.style.opacity = '0'; // met à jour la position de l'élément extérieure lors de la transition transition[interieur] -= largeur * slides.length; } } } // utilisation des flèches du clavier document.addEventListener("keydown", function (touche) { if (touche.key === "ArrowRight") { changerSlide("suivant"); } else if (touche.key === "ArrowLeft") { changerSlide("precedant"); } });
Il y a juste les flèches format SVG qui ne sont pas afficher mais les cliques à droite et gauche de l'image fonctionnent.
J'espère que vous pourrait m'aider à mieux comprendre ce code et à trouver une solution, si vous avez un code mieux que celui-ci je suis preneur.
Bien sûr avant de vous solliciter j'ai cherché et essayé plusieurs solutions sans grand résultat.
Merci et bonne journée !
Partager