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 :

Gérer un évènement [Prototype]


Sujet :

Bibliothèques & Frameworks

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Par défaut Gérer un évènement
    Bonjour,

    Voilà mon problème: j'ai créé un objet page(un div) et je souhaiterais lui ajouter une gestion d'évènement window.onresize pour que quand on redimensionne la fenêtre du navigateur la page(le div) se recentre automatiquement.

    Voici le code :
    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
    var Page = Class.create(Composant,{
      initialize: function(element_parent,name,largeur,hauteur,couleur_fond,couleur_page) {
        this.element_parent = element_parent;
        this.name = name;
        this.largeur = largeur + "px";
        this.hauteur = hauteur + "px";
        this.couleur_fond = couleur_fond;
        this.couleur_page = couleur_page;
        this.position = position;
        this.page = document.createElement('div');
        this.page.style.width = this.largeur;
        this.page.style.height = this.hauteur;
        this.element_parent.appendChild(this.page);
        this.positionne(this.position);
        window.onresize = this.centre();
        this.centre();
     
      },
        centre: function () {
        this.position = position;
        this.page.style.position = "absolute";
        this.page.style.left = $("body").offsetWidth / 2 - this.page.offsetWidth / 2 + "px";
      }
    });
    Tel quel, cela ne fonctionne pas. Quelqu'un peut-il m'aider ?

    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Class.create... ???

    Tu ne confondrais pas Java et Javascript ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Class.create... ???

    Tu ne confondrais pas Java et Javascript ?

    Y'a pas de ça en Java non plus.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Par défaut
    @SpaceFrog, le "Class.create" provient probablement d'une librairie JavaScript (prototype.js par exemple ?) pour générer des objets émulant le fonctionnement de classe.

    Sinon, Kelt_pkr, concernant ton problème, je pense qu'il s'agit dans la façon dont tu attaches ta fonction "centre" à l'événement "resize".

    1) Ce n'est pas une bonne pratique d'utiliser car cela écrase les fonctions attachées précédemment au même évènement (si un autre script a attaché une autre fonction à l'évènement resize, une seule fonction sera appelée...). Il faut utiliser pour cela un "gestionnaire d'événement" qui permet d'ajouter une fonction à un événement sans écraser l'existant (si tu utilises prototype.js, regarde du coté de Event.observe), sinon il faut jongler avec les fonctions "attachEvent" et "addEventListener" selon les navigateurs.

    2) Lorsque tu attaches une fonction à un événement, il faut comme son nom l'indique attacher une fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.onresize = this.centre();
    this.centre() provoque l'exécution de la fonction, mais ne retourne pas de fonction or c'est ce qui est attendu.
    Il y a plusieurs solutions possibles (en utilisant prototype.js pour la gestion d'événement) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Event.observe(window, 'resize', this.centre);
    tu attaches ainsi véritablement une fonction à l'événement onresize, toutefois je ne suis pas certain que cela fonctionne à cause du contexte d'exécution (this ne correspondra peut-être pas à ta "classe").
    La solution qui devrait fonctionner pourrait être la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var self = this;
    Event.observe(window, 'resize', self.centre);
    ou une variante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var self = this;
    Event.observe(window, 'resize', function(event){
       self.centre();
    });
    A+

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Par défaut "Tout à fait Thierry"
    Déjà Merci pour vôtre intérêt. Effectivement j'utilise "prototype.js" je ne l'avais pas précisé désolé.

    Je vais suivre tes conseils BaBeuh et je vous tiens au courant.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Par défaut Super ! ! !
    Merci beaucoup Babeuh, j'avais déja pour un autre développement utilisé cette façon de faire, mais je pensait que c'était de la bidouille et que je me ferais assassiner par un expert en javascript .

    C'est impeccable je passe juste pour un Guignol ça me va !

    Non sérieusement encore merci, j'ai bien fait de soumettre ce petit problème sur le Forum.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Par défaut
    Je ne sais pas si cette façon de faire (passer par une variable supplémentaire pour garder la référence à l'objet courant) est la meilleure, mais comme il est difficile de trouver de "véritables" bests practices sur le net (à travers un nombre incalculable de bout de code de javascript datant d'une dizaine d'années), c'est une méthode que j'utilise pour ma part assez couramment.

    Sinon, tu peux même encore faire différemment toujours en utilisant prototype :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Event.observe(window, 'resize',self.centre.bind(self));
    cf la doc prototype :
    http://prototypejs.org/api/function/bind

    A+

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/07/2006, 13h15
  2. Gérer les évènements VBA par programmation
    Par gbuxo dans le forum VBA Access
    Réponses: 14
    Dernier message: 09/05/2006, 11h13
  3. [Débutant][C#] Comment gérer les événements ?
    Par aDamas dans le forum Windows Forms
    Réponses: 11
    Dernier message: 14/12/2005, 00h16
  4. [Swing]gérer un événement sur un JTextField
    Par madina dans le forum Composants
    Réponses: 3
    Dernier message: 22/11/2005, 11h56
  5. Réponses: 5
    Dernier message: 25/07/2005, 09h29

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