2017-09-25 1 views
6

J'ai un carrousel de flickity, et je veux activer autoPlay. Lorsque le carrousel est en lecture automatique, je veux regrouper les cellules via groupCells: true. Jusqu'ici tout va bien. Lorsque l'utilisateur clique sur les boutons précédent ou suivant, je veux que le curseur ne bouge que d'une cellule, donc lorsque l'utilisateur clique, le groupCells devrait être false.Comportement des cellules du groupe - flickity

Mes Options:

pageDots: false, 
imagesLoaded: true, 
autoPlay: true, 
pauseAutoPlayOnHover: false, 
wrapAround: true, 
groupCells: true, 
selectedAttraction: 0.01 
+0

Créer un exemple concret de ce que vous avez à ce jour et expliquer quel est exactement le problème. Cela aidera les autres utilisateurs à mieux comprendre le problème et vous aurez probablement plus d'attention à cette question et pourrait avoir une réponse. – Dekel

+0

Dans [this] (https://codepen.io/anon/pen/pWrVKQ) exemple les cellules sont groupées, la lecture automatique est définie sur 6s. Tout bon. Je veux que si je clique sur l'une des flèches de nav, il ne ferait que glisser à gauche ou à droite seulement 1 cellule, pas tous les trois groupés. – balintpekker

Répondre

3

Voici ma solution, il est un peu hacky mais semble fonctionner, peut être testé ici: https://codepen.io/anon/pen/QqajpX

<div class="carousel"> 
    <div class="carousel-cell"></div> 
    <div class="carousel-cell"></div> 
    <div class="carousel-cell"></div> 
    <div class="carousel-cell"></div> 
    <div class="carousel-cell"></div> 
    <div class="carousel-cell"></div> 
    <div class="carousel-cell"></div> 
    <div class="carousel-cell"></div> 
    <div class="carousel-cell"></div> 
    <div class="carousel-cell"></div> 
    <div class="carousel-cell"></div> 
</div> 
<script> 
    var carousel = $('.carousel').flickity({ 
     groupCells: true, 
     autoPlay: true 
    }).on('dragEnd.flickity', function(event, pointer) { 
     exitGroupCells(); 
    }).on('staticClick.flickity', function(event, pointer, cellElement, cellIndex) { 
     restartCarousel(cellIndex); 
    }); 

    var flkty = carousel.data('flickity'); 

    flkty.prevButton.on('tap', function() { 
     exitGroupCells(true); 
    }); 

    flkty.nextButton.on('tap', function() { 
     exitGroupCells(); 
    }); 

    function exitGroupCells(prev=false) {    
     if (!flkty.options.autoPlay && !flkty.options.groupCells) { 
      return; 
     } 

     var nextCellIndex = 0; 

     if (prev === true) { 
      for (var i=0; i <= flkty.selectedIndex; i++) { 
       nextCellIndex += flkty.slides[i].cells.length; 
      } 
      nextCellIndex -= 1; 
     } else { 
      var nextCell = flkty.slides[flkty.selectedIndex].cells[0]; 

      for(var i=0; i < flkty.cells.length; i++) { 
       if (nextCell === flkty.cells[i]) { 
        nextCellIndex = i; 
        break; 
       } 
      } 
     } 

     restartCarousel(nextCellIndex); 
    } 

    function restartCarousel(nextCellIndex) { 
     $('.carousel').flickity('destroy') 

     $('.carousel').flickity({ 
      groupCells: false, 
      autoPlay: false, 
      initialIndex: nextCellIndex 
     }); 
    } 
</script> 
+0

Ce n'est pas mal, mais au début, les cellules 1-2-3 sont regroupées, et si je clique sur la navigation pour balayer vers la droite, elle glisse vers la cellule 2. Je veux qu'il balaye la première cellule après les cellules groupées, dans ce cas 4. Si la lecture automatique est activée et qu'elle a déjà été balayée 2 fois, et que les cellules groupées sont 7-8-9, si je balaye à droite, je veux qu'elle balaye au 10. – balintpekker

+0

@balintpekker Je viens de mettre à jour la réponse pour corriger un bug que j'ai trouvé en revenant dans le troisième groupe. Ça devrait aller bien maintenant. – Isma