La barre de progression du curseur ne correspond pas au nombre de diapositives
P粉587780103
P粉587780103 2023-08-25 16:17:45
0
1
634
<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é>
P粉587780103
P粉587780103

répondre à tous(1)
P粉865900994

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.

.slick-track,.slick-list {
   transform: translate3d(0, 0, 0);
  transition: all 150ms ease; 
}

Mise à jour

Veuillez consulter les modifications ci-dessous. J'ai également joint le lien Codepen ici : https://codepen.io/nandu1993/pen/xxjdZjd

.progressBar__bar {
  margin-top: 82px;
  position: relative;
  display: block;
  width: 100%;
  height: 3px;
  overflow: hidden;
  background-image: linear-gradient(to right, yellow, yellow);
  background-repeat: no-repeat;
  background-size: 0% 100%;
  transition: background-size 0.5s ease-in-out;
}



$(document).ready(function () {

  const slider = $('#slider');
  var progressBar = $('.progressBar__bar');
  //for first time load
  slider.on('init', function (event, slick, currentSlide, nextSlide) {
    currentDot = $(".slick-dots .slick-active").index() + 1;
    dots = slider.find('.slick-dots li').length;
    calc = (currentDot / dots) * 100;
    progressBar.css('background-size', calc + '% 100%').attr('aria-valuenow', calc);
  });

  slider.on('afterChange', function (event, slick, currentSlide, nextSlide) {
    var currentDot = $(".slick-dots .slick-active").index() + 1;
    var dots = slider.find('.slick-dots li').length;
    var calc = (currentDot / dots) * 100;

    progressBar.css('background-size', calc + '% 100%').attr('aria-valuenow', calc);
  });

  slider.slick({
    slidesToShow: 5,
    slidesToScroll: 1,
    dots: true,
    infinite: true,
    autoplay: false,
    arrows: true,
    mobileFirst: true,
  });
});
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal