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 :

Slider incrémentation variable


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2019
    Messages : 36
    Par défaut Slider incrémentation variable
    Bonjour à tous,

    J'ai un petit bug sur mon slider, c'est assez compliqué à expliquer mais en gros la première fois que je vais appuyer sur slide suivante ça va faire -1 et la première fois que je vais appuyer sur slide précédente ça va faire +1. Apres le premier clic tout marche bien. Pour moi c'est un problème dans mes methodes " imageSuivante() " et " imagePrecedente() " ligne 55 et 68 mais je ne vois pas comment le régler... Si quelqu'un à une solution je suis preneur, merci d'avance !

    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
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     class Slider {
        constructor(i, time, timer, slide, playing, nextImg, prevImg, pause) {
            this.i = i;
            this.time = time;
            this.timer = timer;
            this.slide = slide;
            this.playing = playing;
            this.nextImg = document.getElementById("fleche-droite");
            this.prevImg = document.getElementById("fleche-gauche");
            this.pause = document.getElementById("bouton-pause");
            this.init();
        }
     
        init() {
            this.afficherSlide();
            this.changeImg();
            this.nextImg.addEventListener("click", this.imageSuivante.bind(this));
            this.prevImg.addEventListener("click", this.imagePrecedente.bind(this));
            this.register();
            this.pause.addEventListener("click", this.initPause);
        }
     
        afficherSlide() {
            this.slide[0] = {
                images: '/img/velo-lyon.jpg',
                texte: '<p class="text1"> Première étape : Cliquez sur la station de votre choix </>'
            }
            this.slide[1] = {
                'images': '/img/velo-lyon2.jpg',
                'texte': '<p class="text2"> Deuxième étape : Rentrez votre Nom et prénom dans le formulaire et cliquez sur Réserver </>'
            }
            this.slide[2] = {
                'images': '/img/velo-lyon3.jpg',
                'texte': '<p class="text3"> Troisième étape : Veuillez signer le formulaire </>'
            }
            this.slide[3] = {
                'images': '/img/velo-lyon4.jpg',
                'texte': '<p class="text4">Dernière étape : Appuyez sur Valider ! :) </>'
            }
        }
     
        changeImg() {
            document.slide.src = this.slide[this.i].images;
            document.getElementById("sliderText").innerHTML = this.slide[this.i].texte;
     
            if (this.i < this.slide.length - 1) {
                this.i++;
            } else {
                this.i = 0;
            }
     
            this.timer = setTimeout(this.changeImg.bind(this), this.time);
        }
     
        imageSuivante() {
            document.slide.src = this.slide[this.i].images;
            document.getElementById("sliderText").innerHTML = this.slide[this.i].texte;
            clearTimeout(this.timer);
     
            if (this.i == 3) {
                this.i = 0;
            } else {
                this.i++;
            }
             this.timer = setTimeout(this.changeImg.bind(this), this.time);
        }
     
        imagePrecedente() {
            document.slide.src = this.slide[this.i].images;
            document.getElementById("sliderText").innerHTML = this.slide[this.i].texte;
            clearTimeout(this.timer);
     
            if (this.i == 0) {
                this.i = 3;
            } else {
                this.i--;
            }
             this.timer = setTimeout(this.changeImg.bind(this), this.time);
        }
     
        pauseSlider() {
            this.pause.innerHTML = "▶";
            this.playing = false;
            clearTimeout(this.timer);
        }
     
        playSlider() {
            this.pause.innerHTML = "❚❚";
            this.playing = true;
            this.timer = setTimeout(this.changeImg.bind(this), this.time);
        }
     
        initPause() {
            if (slider.playing) {
                slider.pauseSlider();
            } else {
                slider.playSlider();
            }
        }
     
        register() {
            var that = this;
            window.addEventListener("keydown", function (e) {
                return that.touchesBouton(e);
            });
        }
     
        touchesBouton(e) {
            switch (e.keyCode) {
                case 39:
                    this.imageSuivante();
                    break;
                case 37:
                    this.imagePrecedente();
                    break;
            }
        }
    }
     
    let slider = new Slider(0, 5000, "", [], true);
    Je vous met aussi le lien de mon site pour avoir un meilleur aperçu du bug, car je l'ai assez mal expliquer.

    http://projet3.webagencycor.com/

  2. #2
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 098
    Par défaut
    Le problème tient en deux choses :
    • la méthode changeImg() fait doublon avec imageSuivante() ;
    • la propriété i représente non pas l’état de la slide visible actuellement, mais de celle qui sera visible lors du prochain changement.

    De fait, chaque fois que la méthode changeImg() est appelée (donc chaque fois qu’on laisse le timer s’écouler), i est positionnée sur la slide prévue précédemment prévue, indépendamment du bouton sur lequel on a cliqué.

    Pour corriger ça, je te propose de supprimer la méthode changeImg() en la remplaçant par imageSuivante() dans les setTimeout(), puis de modifier les deux méthodes imageSuivante() et imagePrecedente() pour que i soit modifiée avant d’être prise en compte pour afficher la slide :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    imageSuivante() {
        this.i++;
        if (this.i >= this.slide.length) {
            this.i = 0;
        }
     
        document.slide.src = this.slide[this.i].images;
        document.getElementById("sliderText").innerHTML = this.slide[this.i].texte;
     
        clearTimeout(this.timer);
        this.timer = setTimeout(this.imageSuivante.bind(this), this.time);
    }
     
    imagePrecedente() {
        this.i--;
        if (this.i < 0) {
            this.i = this.slide.length - 1;
        }
     
        document.slide.src = this.slide[this.i].images;
        document.getElementById("sliderText").innerHTML = this.slide[this.i].texte;
     
        clearTimeout(this.timer);
        this.timer = setTimeout(this.changeImg.bind(this), this.time);
    }
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2019
    Messages : 36
    Par défaut
    Merci beaucoup d'avoir pris le temps de me répondre, tout marche parfaitement maintenant!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Slider, incrémentation discrète
    Par phyfab dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 18/06/2014, 13h35
  2. Incrémenter variables automatiquement
    Par Ankhsounamon31 dans le forum SAS Base
    Réponses: 5
    Dernier message: 13/04/2011, 12h34
  3. [WD12] Incrémentation variable dans WdEtat
    Par Yolak dans le forum WinDev
    Réponses: 3
    Dernier message: 05/06/2009, 09h36
  4. incrémentation variable sql
    Par zemblamoh dans le forum Langage SQL
    Réponses: 0
    Dernier message: 03/06/2009, 11h05
  5. Incrémentation Variable
    Par Boujou dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 21/04/2005, 11h28

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