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

Bibliothèques & Frameworks Discussion :

aide avec each [MooTools]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 94
    Points : 56
    Points
    56
    Par défaut aide avec each
    Salut à tous !

    J'aimerais faire quelque chose d'assez simple (je crois) , je pense que each pourrait être une solution à mon problème.

    malheureusement, je n'arrive pas bien à l'exploiter.

    J'ai une série de div qui porte le même 'id' boite.
    Cette série est générer par une boucle while de php.

    un peu comme àa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <div id="boiteEnsemble">			
    <?php
            while ($donnees = mysql_fetch_array($reponse)){
    ?>
    	<div id="boite"><?php echo $donnees['valueX'] ?></div>
    <?php
            }
    ?>
    </div>
    J'aimerais lors d'un survol de ces boites effectuer un changement de couleur.
    Pour 1 boite j'y arrive très bien !
    Mais ça se complique lorsque j'essaie de le faire pour ma série de boites.

    voici ce que j'ai tenté de faire sans succès...
    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
     
    var group = $('boiteEnsemble').getElements('div[id=boite]');
    group.each(function() {
    	myEffect = new Fx.Morph(group, {duration: 500, fps:60, link: 'cancel', transition: Fx.Transitions.Cubic.easeOut});
    	group.addEvent('mouseenter', rollOver);
    	group.addEvent('mouseleave', rollOut);
    });
    function rollOver() {
    	this.myEffect.start({
    	'background-color': '#E6F1F5'
    	});	
    }
    function rollOut() {
    	this.myEffect.start({
    	'background-color': '#000000'
    	});
    }
    donc j'arrive bien à sélectionner toutes mes div avec l'id boite, mais après c'est au niveau de l'éffet myEffect.start que ça bloque.

    Merci par avance de votre aide !

    @+++

  2. #2
    En attente de confirmation mail

    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2003
    Messages : 253
    Points : 637
    Points
    637
    Par défaut
    Je ne suis pas sûr que ça règle ton problème totalement, mais déjà les id sont destinés à des éléments uniques Il ne peut donc y avoir qu'un seul id "boite" par document. Je te suggère de mettre un class="boite" à la place et de faire quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $$('.boite').each(function(el) {
      // ... Traitement
    });
    Deuxième problème que je vois, tes fonctions rollOver font référence à this, or dans ce contexte this se réfèrera pas à ta boite... Pour ce faire, il faut effectuer un bind, c'est à dire lier l'objet désiré (l'élément représentant ta boite) via la méthode bind de la classe Function (merci Mootools !).

    Ca se ferait un peu de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $$('.boite').each(function(el) {
    // Dans ce contexte el équivaut à la boite courante
    el.addEvent('mouseleave', rollOut.bind(el)); // Grâce au bind, l'appel à rollOut pourra utiliser l'élément de la boite via this
    }
    Et surtout troisième problème, il y a une grosse erreur de logique !
    Each fonctionne de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    objetATraverser.each(function(element, index) {
      alert('L\'index ' + index + ' vaut ' + element);
    });
    Each permet de boucler sur l'objet et de passer à une fonction la valeur de chaque élément et de l'index. Au sein de la boucle, this se réfère au tableau, et tu peux omettre le second argument si tu n'en as pas besoin.

    Si tu regardes ton code, à chaque passage de la boucle, tu appliques un traitement au tableau et non à l'élément courant ce qui ne sert pas à grand chose.

    Je pense que ton code devrait plus se rapprocher de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $$('.boite').addEvent('mouseenter', function() {
    // this ici représente l'élément de la boite, à toi de l'utiliser pour lancer l'effet voulu...
    });
    Si tu veux une explication, Mootools est très gentil et nous permet d'appliquer les méthodes propre à la classe Element directement sur une collection d'Elements, ce qui nous épargne une boucle. C'est gentil mais un peu sournois :
    - On s'y perds vite quand on débute
    - On arrive à faire 50 boucles à la suite pour s'épargner du code, si jamais on ne fait pas attention à comment Mootools fonctionne.

    Désolé pour le pavé, j'espère que ça aidera un peu à éclaircir, et n'hésite pas à lire et relire la doc

  3. #3
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 94
    Points : 56
    Points
    56
    Par défaut
    Mais au contraire !!
    Merci pour le pavé fort en explications !

    Effectivement, je ne savait même pas qu'on pouvais passer des éléments à each. aussi je ne comprenais pas l'utilité de 'bind'.

    Je vais appliquer le code en fonction des explications !
    Je te tiens au courant de l'évolution !

    A très vite !

    Et encore merci pour toutes les explications très utiles.

  4. #4
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 94
    Points : 56
    Points
    56
    Par défaut
    Ça y est ! J'ai réussi à bien faire fonctionner tout ça.
    Les deux pistes que tu m'a donné marche parfaitement.

    Et surtout (Le plus important) c'est que j'ai vraiment compris le mécanisme cette fois ci.

    Merci et @+ !

  5. #5
    En attente de confirmation mail

    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2003
    Messages : 253
    Points : 637
    Points
    637
    Par défaut
    Pas de quoi

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

Discussions similaires

  1. Besoin d'aide avec Regexp::Assemble
    Par mobscene dans le forum Modules
    Réponses: 5
    Dernier message: 11/04/2007, 12h39
  2. [ASA] J'ai besoin d'aide avec sybase et vb6 svp !!
    Par tibo830 dans le forum SQL Anywhere
    Réponses: 7
    Dernier message: 12/05/2006, 10h09
  3. Besoin d'aide avec TinyXML
    Par Clad3 dans le forum Bibliothèques
    Réponses: 5
    Dernier message: 15/08/2005, 18h20
  4. Réponses: 2
    Dernier message: 29/08/2003, 17h52
  5. Besoin d'aide avec postgresql sous windows NT
    Par Chihuahua dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/07/2003, 08h29

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