IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Sliding div horizontalement avec des fleches


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 12
    Points : 12
    Points
    12
    Par défaut Sliding div horizontalement avec des fleches
    Je suis partie sur une autre solution utilisant scrollLeft et un timeout qui me permet d'avoir un scoll plus fluide.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <div class="controls">
    	<a class="previous" href="" id="prev" onmousedown="left();" onmouseup="stopChrono();"><img src="images/fleche_g.jpg" alt="Voir les vignettes de gauche" title="Voir les vignettes de gauche" /></a>
    	<div class="wrapper-thumbs">
    		<div id="allthumbs">
    			<ul id="thumbs">
    			</ul>
    		</div>
    	</div>
    	<a class="next" href="" id="next" onmousedown="right();" onmouseup="stopChrono();"><img src="images/fleche_d.jpg" alt="Voir les vignettes de droites" title="Voir les vignettes de droites" /></a>
    </div>

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #slideshow .controls .wrapper-thumbs {
    	overflow: hidden;
    	position: relative;
    	float: left;
    	margin: 0;
    	width: 556px;
    	height: 76px;
    }
     
    /* #allthumbs {
    	width: 556px;
    	overflow-x: auto;
    	overflow-y: hidden;
    	white-space: nowrap;
    } */
     
    #thumbs {
    	display: inline-block;
    	width: 900px;
    	height: 76px;
    	position: absolute;
    	z-index: 99;
    }
     
    #thumbs li {
    	display: inline-block;
    	max-width: 114px;
    	margin-left: 10px;
    }
     
    #thumbs img {
    	float: left;
    	width: 114px;
    	margin: 0;
    }
     
    #thumbs img:hover {
    	cursor: pointer;
    }
     
    #slideshow .controls .previous, #slideshow .controls .next {
    	float: left;
    	width: 51px;
    	height: 76px;
    	position: relative;
    	z-index: 999;
    }
     
    #slideshow .controls .previous {
    	background: transparent url('images/fleche_g.jpg') 0 0 no-repeat;
    }
     
     
    #slideshow .controls .next {
    	background: transparent url('images/fleche_d.jpg') 0 0 no-repeat;
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // Use the arrow to slide the thumbnails
    var chrono;
    function stopChrono() {
        clearInterval(chrono);
    }
     
    function left() {
        document.getElementById("allthumbs").scrollLeft = (parseInt(document.getElementById("allthumbs").scrollLeft,10) - 10);
        chrono = setTimeout("left()",100);
    }
     
    function right() {
        document.getElementById("allthumbs").scrollLeft = (parseInt(document.getElementById("allthumbs").scrollLeft,10) + 10);
        chrono = setTimeout("right()",100);
    }
    Un exemple "live"

    Mon problème est que quand je cliques et que je reste clique ça marche bien c;est parfait mais quand je lâche ma souris, les vignettes reviennent a leur position de départ. Idéalement j'aimerais que
    - le div reste ou il était quand j'ai lâche la souris et
    - pouvoir utiliser la flèche de gauche...

    Merci de votre aide pour m;aider a résoudre mon soucis, en JS seulement, pas de librairies !

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function left() {    
        document.getElementById("allthumbs").scrollLeft = (parseInt(document.getElementById("allthumbs").scrollLeft,10) - 10);
        chrono = setTimeout("left()",100);
    }
     
    function right() {
        document.getElementById("allthumbs").scrollLeft = (parseInt(document.getElementById("allthumbs").scrollLeft,10) + 10);
        chrono = setTimeout("right()",100);
    }
    Pourquoi un timeout qui relance la même fonction toutes les 100ms ? Tel que le code est actuellement, les fonctions vont se répeter en boucle infinie. Je doute que ce soit ce que tu veux. Aussi si tu utilises setTimeout c'est clearTimeout qu'il faut utiliser, pas clearInterval.
    One Web to rule them all

Discussions similaires

  1. Barre horizontale avec des images
    Par Jeekounet dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 06/04/2014, 21h41
  2. Réponses: 4
    Dernier message: 02/04/2013, 12h31
  3. Alignement de 3 div horizontales avec 2 div en largeur 100%
    Par doomxl dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 19/12/2010, 00h08
  4. centrer un bloc avec des div+css
    Par fabrisss dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 27/10/2005, 23h41
  5. mettre en page avec des div
    Par mathieu_r dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 10/08/2005, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo