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 :

Boucle sur src image


Sujet :

JavaScript

  1. #1
    Membre habitué
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2018
    Messages : 12
    Par défaut Boucle sur src image
    Bonjour, j'ai un petit problème avec la boucle suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var geeks = document.querySelectorAll(".geek img");
    for (var i = 0; i < geeks.length; i++){
      geeks[i].addEventListener('mouseover', function(){  // changer la scr de l'image
        var source = this.setAttribute('src', 'img/geek-animation/geek_red/geek-' + i + '.png');
        document.querySelectorAll('.geek img')[i] = source;
      });
      geeks[i].addEventListener('mouseout', function(){  // rétablir la source de l'image
        var source = this.setAttribute('src', 'img/geek-animation/geek_white/geek-' + i + '.png');
        document.querySelectorAll('.geek img')[i] = source;
      });
    }
    cela semble fonctionner pour ce qui concerne la balise img, mais la source me donne une image qui n'existe pas à savoir "geek-7.png", alors que les images vont de geek-0.png à geek-6.png. logiquement cette boucle devrait m'envoyer la même valeur de i que la balise img non?

    je ne comprends pas comment faire. quelqu'un aurait-il une soluce pour une débutante comme moi?

    merci et bonne année!!!!

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut
    Salut et Bonne Année a toi aussi, pour la boucle soit tu initialise a 1 au lieu de 0 ce que je te conseil pas ou soit tu opte 1 a chaque itération a la somme des images soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var geeks = document.querySelectorAll(".geek img");
    for (var i = 0; i < (geeks.length-1); i++){
      geeks[i].addEventListener('mouseover', function(){  // changer la scr de l'image
        var source = this.setAttribute('src', 'img/geek-animation/geek_red/geek-' + i + '.png');
        document.querySelectorAll('.geek img')[i] = source;
      });
      geeks[i].addEventListener('mouseout', function(){  // rétablir la source de l'image
        var source = this.setAttribute('src', 'img/geek-animation/geek_white/geek-' + i + '.png');
        document.querySelectorAll('.geek img')[i] = source;
      });
    }
    A tester bien sur.

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    l'explication est lié au scope, question que vaut la variable i au moment de l’exécution des fonctions ?

    Réponse dans la Comment attribuer à des objets un onclick faisant appel à une variable de boucle ?.

    La réponse « moderne », avec l’avènement de l'ES6, est de remplacer ton var i par let i ton problème de scope sera résolu, voir let sur MDN.

  4. #4
    Membre habitué
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2018
    Messages : 12
    Par défaut
    merci c'était bien ça: let !
    je pensais que c'était réservé à jquery bêtement..
    je vais lire attentivement cet article

    merci encore!!!

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Ah NoSmoking m'a devancé, je voulais tester avant de répondre... Merci à lui notamment pour la faq...

    Bon je poste quand même une simplification de votre code :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var geeks = document.querySelectorAll(".geek img");
     
    for (let i = 0; i < geeks.length; i++) {
     
        geeks[i].addEventListener('mouseover', function () { // changer la scr de l'image           
            this.src = 'img/geek-animation/geek_red/geek-' + i + '.png';
        });
        geeks[i].addEventListener('mouseout', function () { // rétablir la source de l'image
            this.src = 'img/geek-animation/geek_white/geek-' + i + '.png';
        });
    }


    C'est moins lourd et plus rapide je pense que d'utiliser à chaque fois querySelectorAll(".geek img"), setAttribute et la variable "source"....

  6. #6
    Membre habitué
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2018
    Messages : 12
    Par défaut
    oui merci beginner.!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/02/2014, 10h53
  2. Réponses: 20
    Dernier message: 23/11/2013, 18h53
  3. Boucle sur les pixels d'une fichier image
    Par Beaudelicius dans le forum Général Python
    Réponses: 2
    Dernier message: 19/02/2012, 18h57
  4. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  5. Réponses: 6
    Dernier message: 15/11/2007, 12h31

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