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 :

gestionnaire d'evènements


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 14
    Par défaut gestionnaire d'evènements
    Bonjour!
    Petit souci au niveau d'un gestionnaire d'évènements que j'utilise pour lancer plusieurs fonctions au chargement de la page:

    Dans le script actuel (ci-dessous) seules les 2 premières fonctions disparition() et redim() sont opérationnelles, liens() ne marche pas. Bizarrement, si j'intervertis leur ordre tout se bloque: si redim() est 1è, les autres ne marchent plus, si redim() est 3è, elle ne marche plus. Est-ce redim() qui pose problème? J'aimerais également ajouter un code pour que lorsqu'on redimensionne la fenêtre, la page se recharge...

    (NB: les 3 fonctions prises séparément fonctionnent!)

    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
    function redim() {	
    var winW = document.documentElement.offsetWidth-80;//80= les marges droite + gauche.
    var winH = document.documentElement.offsetHeight;
    var winRatio = winW/winH;
    var animRatio = origW/origH;
    if(winRatio > animRatio){
    		animH = winH;//note: utilisation de variables globales!
    		animW = winH*animRatio;
    	} else {
    		animH = winW/animRatio;
    		animW = winW;
    }
    }
     
     
    //disparition du titre avec délai:
    function disparition() {
    	temp=document.getElementById('titre');
    	setTimeout('temp.style.display="none"',2600); 
    }
     
    //apparition des liens au survol de l'image:
    function liens() {
    	lien=document.getElementsByTagName('a');
    	for (var i=0;i<lien.length;i++) {
    	lien[i].style.display="block";
    	}
    	}
     
     
    //initialisation:
    function addEvent(obj, event, fct) {
        if (obj.attachEvent) //Est-ce IE ?
            obj.attachEvent("on" + event, fct); //Ne pas oublier le "on"
        else
            obj.addEventListener(event, fct, true);
    }
    addEvent(window, "load", disparition);
    addEvent(window, "load", redim());
    addEvent(document.getElementById('flashcontent'), "mousemove", liens);
     
     
    //lancement: 
    function lancer(fct) {
        addEvent(window, "load", fct);
    }

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Salut,

    Rien d'étonnant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addEvent(document.getElementById('flashcontent'), "mousemove", liens);
    es-tu sûr que l'élément 'flashcontent' existe lorsque tu lances ce gestionnaire ?
    Je dirais que non, du coup quand il est appelé, tu génères une erreur et le script se bloque.
    Lorsqu'il est appelé en dernier, ça va encore, mais quand il est lancé en premier, comme l'erreur est bloquante, le reste du script n'est pas exécuté...
    De plus, ton 2e appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addEvent(window, "load", redim());
    contient aussi une erreur : le dernier argument doit être une référence à une fonction, toi tu passes la fonction elle-même donc c'est son résultat qui est affecté à l'événement...
    Dans ton cas, tu ferais mieux de passer par un gestionnaire unique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    addEvent(window, "load", function(){
        disparition();
        redim();
        addEvent(document.getElementById('flashcontent'), "mousemove", liens);
    }
    Tu noteras au passage que dans ce cas, on passe par une fonction anonyme dans laquelle on appelle cette fois la fonction et non une référence à la fonction, ce qui permet si besoin de passer des paramètres.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 14
    Par défaut
    J'ai essayé ta proposition, mais cette fois aucune des fonctions ne marche (y compris séparément).

    Quant au
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addEvent(window, "load", redim());
    ça m'a étonné aussi, mais ça ne marche que si je passe la fonction, dès que je vire les parenthèses ça ne marche plus.

    Enfin pour l'élément flashcontent, je suppose qu'il n'est aps encore chargé quand le navigateur parcourt le javascript... mais dans ce cas comment est-ce que j'appelle la fonction liens() quand la souris se déplace sur flashcontent (je sais que je peux mettre un onmousemove="liens();" dans la balise du flashcontent, mais pour une fois je voulais essayer de faire un truc propre en évitant ce genre de pratique...)

    EDIT:
    J'ai ajouté une fonction supplémentaire. Toutes marchent (et redim() bel et bien en mettant les parenthèses), sauf liens() que je ne sais pas quand ni comment appeler.

    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
    function addEvent(obj, event, fct) {
        if (obj.attachEvent) //Est-ce IE ?
            obj.attachEvent("on" + event, fct); //Ne pas oublier le "on"
        else
            obj.addEventListener(event, fct, true);
    }
    addEvent(window, "load", disparition);
    addEvent(window, "resize", recharge);
    addEvent(window, "load", redim());
    //addEvent(document.getElementById('flashcontent'), "mousemove", liens);
     
    //lancement: 
    function lancer(fct) {
        addEvent(window, "load", fct);
    }

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Oui, j'ai oublié la parenthèse fermanre...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    addEvent(window, "load", function(){
        disparition();
        redim();
        addEvent(document.getElementById('flashcontent'), "mousemove", liens);
    });
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 14
    Par défaut
    Oui je l'avais vu et ajouté de moi-même. Et ça ne marchait pas mieux.
    Bref, tant pis pour la propreté du code, mais j'ai gardé mon gestionnaire d'évènements, avec le mauvais appel à redim(), et liens() est appelée dans la page html.
    Après tout, le principal est que ça marche, et c'est même archi compatible (même IE6, c'est dire!)
    En tout cas merci encore m'sieur Bovino de dépanner à chaque fois l'ignare débutant que je suis!

Discussions similaires

  1. Service Windows et Gestionnaire d'Evènements
    Par mimic50 dans le forum C#
    Réponses: 0
    Dernier message: 30/01/2009, 12h16
  2. Non réception d'un evènement sur une JTable
    Par Kant dans le forum Composants
    Réponses: 4
    Dernier message: 28/05/2004, 10h38
  3. gestionnaire de memoire
    Par elone dans le forum C
    Réponses: 2
    Dernier message: 23/01/2003, 00h31
  4. Evènement sur clic droit !?
    Par soccersoft dans le forum Composants VCL
    Réponses: 6
    Dernier message: 26/12/2002, 21h39
  5. [VB6] Gestionnaire des tache de windows 2000 avec VB6
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/11/2002, 08h21

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