recherche

Maison  >  Questions et réponses  >  le corps du texte

La barre de progression du curseur ne correspond pas au nombre de diapositives

<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粉587780103P粉587780103494 Il y a quelques jours656

répondre à tous(1)je répondrai

  • P粉865900994

    P粉8659009942023-08-26 00:30:54

    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,
      });
    });

    répondre
    0
  • Annulerrépondre