Défilement horizontal jQuery (cliquer et animer)

J’ai une série de divs flottant à l’infini dans une ligne horizontale. J’ai un div de largeur fixe contenant eux, débordement: caché. En fin de compte, j’aimerais appuyer sur les boutons divs / à gauche et à droite pour faire défiler les éléments (par rapport à l’utilisation de la barre de défilement).

J’ai du mal à faire travailler .animate (). Je veux que chaque clic déplace les éléments de la liste.

Il devrait fonctionner de manière similaire à la liste “Les clients qui ont acheté cet article ont également acheté” que vous pouvez faire défiler de la même manière. J’étais tenté d’essayer d’utiliser .mousedown et de le faire bouger tout en le maintenant (semblable au défilement réel), mais je voudrais d’abord faire cette approche plus facilement.

Voici le violon et le code:

http://jsfiddle.net/stfzy/16/

HTML:

CSS:

  #container{ width:340px; height:50px; } #list-container { overflow:hidden; width: 300px; float:left; } .list{ background:grey; min-width:700px; float:left; } #arrowR{ background:yellow; width:20px; height:50px; float:right; cursor:pointer; } #arrowL{ background:yellow; width:20px; height:50px; float:left; cursor:pointer; } .item{ background:green; width:140px; height:40px; margin:5px; float:left; } 

jQuery

 $(document).ready(function() { $('div#arrowR').click(function(){ $('div.item').animate({'left':'-=300px'}); }); $('div#arrowR').click(function(){ $('div.item').animate({'left':'+=300px'}); }); }); 

Toute aide appréciée. Merci!

Add position:relative to .item , comme ceci:

 .item{ background:green; width:140px; height:40px; margin:5px; float:left; position:relative; /* Put me here! */ } 

Exemple de travail: http://jsfiddle.net/mattblancarte/stfzy/21/

Il y a encore quelques bugs dans votre configuration, mais cela devrait vous décoiffer. 🙂

Modifier::

Voici une solution rapide pour résoudre le bug où la liste glisserait trop loin dans les deux sens:

 $(document).ready(function() { var $item = $('div.item'), //Cache your DOM selector visible = 2, //Set the number of items that will be visible index = 0, //Starting index endIndex = ( $item.length / visible ) - 1; //End index (NOTE:: Requires visible to be a factor of $item.length... You can improve this by rounding...) $('div#arrowR').click(function(){ if(index < endIndex ){ index++; $item.animate({'left':'-=300px'}); } }); $('div#arrowL').click(function(){ if(index > 0){ index--; $item.animate({'left':'+=300px'}); } }); });