La barre de progression du curseur ne correspond pas au nombre de diapositives
P粉587780103
2023-08-25 16:17:45
<p>J'ai créé un carrousel contenant des éléments <code>7</code> </p>
<p>Par défaut, ce carrousel affichera les éléments <code>5</code> </p>
<p>Lors de ma démo, j'ai rencontré deux problèmes : </p>
<ol>
<li>Le curseur est réglé sur <code>boucle infinie</code>, mais lorsqu'il revient à la diapositive 1, la barre de progression ne se réinitialise pas. ≪/li>
<li>Une fois que le curseur atteint la fin, il revient immédiatement à la diapositive 1 (au lieu d'une transition douce). ≪/li>
<li>Une fois la 7ème diapositive (7ème carte) visible, la barre de progression devrait se terminer. ≪/li>
</ol>
<p><code>$slider.slick("getSlick").slideCount</code>'s <code>console.log</code> renvoie 7, qui correspond au nombre d'éléments dans le curseur. Je ne sais donc pas quelle est la cause de ces problèmes.</p>
<p></p>
<pre class="brush:js;toolbar:false;">(function($) {
const $slider = $('#slider');
var $progressBar = $('.progressBar__bar');
$slider.on('beforeChange', function(event, slick, currentSlide, nextSlide) {
var calc = ((nextSlide) / (slick.slideCount - 1)) * 100;
$progressBar.css('background-size', calc + '% 100%').attr('aria-valuenow', calc);
});
$slider.slick({
slidesToShow : 5,
slidesToScroll : 1,
vitesse: 400,
flèches : vrai,
mobileFirst : vrai,
});
})(jQuery);</pre>
<pre class="brush:css;toolbar:false;">.cardSlider {
remplissage : 100px 0 ;
fond : noir ;
Couleur blanche;
}
.carte {
la couleur noire;
remplissage : 50 px ;
alignement du texte : centre ;
}
.progressBar__bar {
marge supérieure : 82 px ;
position : relative ;
bloc de visualisation;
largeur : 100 % ;
hauteur : 3px ;
débordement caché;
image d'arrière-plan : dégradé linéaire (à droite, jaune, jaune) ;
répétition d'arrière-plan : pas de répétition ;
taille de l'arrière-plan : 5 % 100 % ;
transition : facilité d'entrée et de sortie de la taille de l'arrière-plan de 0,5 s ;
}
.progressBar__bar[aria-valuenow="0"] {
taille de l'arrière-plan : 5 % 100 % !important ;
}
.progressBar__bar[aria-valuenow] {
hauteur : 5px ;
}
.progressBar__bar:avant {
contenu: "";
position : absolue ;
gauche : 0 ;
haut : 50 % ;
transformer : traduire (0%, -50 %);
largeur : 100 % ;
hauteur : 0,5 pt ;
couleur de fond : blanc ;
}
.slick-slide {
marge : 0px 10px ;
affichage : aucun ;
flotteur : gauche ;
hauteur : 100 % ;
hauteur minimale : 1 px ;
aperçu : aucun !important ;
}
.slick-slide.slick-loading {
affichage : aucun ;
}
.slick-slide.dragging img {
événements de pointeur : aucun ;
}
.slick-slide img {
largeur : 100 % ;
bloc de visualisation;
}
.slick-slider {
position : relative ;
bloc de visualisation;
dimensionnement de la boîte : bordure-boîte ;
-webkit-touch-callout : aucun ;
-khtml-user-select : aucun ;
action tactile : pan-y ;
-webkit-tap-highlight-color : transparent ;
}
.slick-liste {
position : relative ;
bloc de visualisation;
débordement caché;
marge : 0 ;
remplissage : 0 ;
}
.slick-list:focus {
contour : aucun ;
}
.slick-list.dragging {
curseur : pointeur ;
curseur : main ;
}
.slick-piste,
.slick-liste {
transformer : traduire3d(0, 0, 0);
transition : toutes les 150 ms de facilité ;
}
.slick-piste {
position : relative ;
haut : 0 ;
gauche : 0 ;
aligner les éléments : centre ;
largeur : 100 % ;
}
.slick-track:avant,
.slick-track:après {
affichage : tableau ;
contenu: "";
}
.slick-track:après {
clarifier les deux;
}
.slick-initialisé .slick-slide {
bloc de visualisation;
}≪/pré>
<pre class="brush:html;toolbar:false;"><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"> ;</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick-theme.css" rel="stylesheet"/>
<section class="cardSlider">
<div class="conteneur">
<div class="ligne">
<div class="col-12">
<div class="cardSlider__listing" id="slider">
<article class="carte">
Carte 1
</article>
<article class="carte">
Carte 2
</article>
<article class="carte">
Carte 3
</article>
<article class="carte">
Carte 4
</article>
<article class="carte">
Carte 5
</article>
<article class="carte">
Carte 6
</article>
<article class="carte">
Carte 7
</article>
</div>
</div>
</div>
<div class="ligne">
<div class="col-12">
<div class="progressBar">
<div class="progressBar__bar" role="progressbar" aria-valuemin="0" aria-valuemax="100"></div>
</div>
</div>
</div>
</div>
</section></pré>
Je pense que la barre de progression fonctionne actuellement correctement dans votre code.
Pour le deuxième point que vous avez mentionné concernant la transition en douceur, veuillez supprimer le CSS suivant de votre code et essayez-le.
Mise à jour
Veuillez consulter les modifications ci-dessous. J'ai également joint le lien Codepen ici : https://codepen.io/nandu1993/pen/xxjdZjd