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 :

Tester si la souris survole un DIV


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut Tester si la souris survole un DIV
    Bonjour,

    Je cherche à tester si un div est survoler par la souris.



    Il y a plusieurs possibilités mais j'aimerais trouver quelque chose de plus simple


    Méthode 1

    Mettre sur le div onMouseOut et onMouseOver. Dans le over on crée une variable qu'on met à on et quand on sort on remet la variable à off. Comme ça quand on veut savoir si la souris est dedans, on test la variable.


    Défaut : c'est lourd de mettre onMouseOut et onMouseOver

    Méthode 2

    Par rapport aux posisitions. On prend les coordonnées du DIV et ses dimensions et on vérifie si la position du curoseur se trouve dedans. Mais

    Défaut: hélas, cette solution ne tient pas compte des éventuellements éléments positionné en aboslute et étant position à l'extérieur du div conteneur.


    Méthode 3 (Prototype)

    Utiliser $$() qui utilise les propriétés CSS pour identifer un ou plusieurs élements.

    Si je fais $$('#monDiv'), il me retourne l'element en question. Donc je me suis dit pourquoi pas faire $$('#monDiv:hover') si il ne retourne rien c'est que l'élement n'est pas survolé. Hélas il me tourne toujours l'élément même s'il n'est pas survolé.

    Je sais que $$('#monDiv:empty') fonctionne. Il retourne l'élement si seulement il est vide.


    Donc ma question concerne la méthode 3... comment puis-je utiliser $$('#monDiv:hover') ?


    Merci,

  2. #2
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    Citation Envoyé par vodnok Voir le message
    Bonjour,
    Défaut : c'est lourd de mettre onMouseOut et onMouseOver
    en quoi est ce lourd ???

    Citation Envoyé par vodnok Voir le message
    Par rapport aux posisitions. On prend les coordonnées du DIV et ses dimensions et on vérifie si la position du curoseur se trouve dedans. Mais
    ça c'est lourd

    Citation Envoyé par vodnok Voir le message
    Je sais que $$('#monDiv:empty') fonctionne. Il retourne l'élement si seulement il est vide.
    normal ... tu es sur une div si elle contient des éléments le out se déclenchera

    donc au final 2 solutions :

    - annihiler les évènements de tous les éléments a l'intérieur de ta div
    - utiliser ta méthode n° ( pt la plus simple )


    bon appétit
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par le_chomeur Voir le message
    normal ... tu es sur une div si elle contient des éléments le out se déclenchera
    Je disais ça car div:hover ne fonctionne pas ! Alors que div:empty oui. div:empty c'est du CSS3 non ? Etrange que le hover ne donne pas le résultat escompté car alors c'est beaucoup plus facile. Il suffit de faire if($$('#divId:hover').length>0) return true else return false; Ca c'est ce que j'appel quelque chose de léger


    Citation Envoyé par le_chomeur Voir le message
    donc au final 2 solutions :

    - annihiler les évènements de tous les éléments a l'intérieur de ta div
    - utiliser ta méthode n° ( pt la plus simple )
    bon appétit
    Oui c'est ce que je vais sans doute faire. Je trouve ça lourd car ca allourdi le code. Mais je vais tanter d'ajouter les 2 évenements via un code js. Genre function watchMouseOnEleme(id){...} qui va ajouter les évenements et gérer un tableau qui contient l'info y ou n en fonction d'ou se trouve la souris.


    Merci de ta réponse.

  4. #4
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    étudie ce code =>
    http://www.developpez.net/forums/d63...r/#post3731399

    tu auras la méthode de limite , et la méthode pour al souris après a toi de gérer les conditions si dedans ou dehors
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut
    Haaa merci. Je me demandais comment faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x.onmousemove=function fnc1(e) {
       // ...
    }

    Je vais tester les différentes possibilités qui se trouve dans le topic. Mais il y a aussi les events prototype.



    Mais bon c'est ennuyant que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($$('#divId:hover').length>0) return true else return false;
    Ne fonctionne pas

  6. #6
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    ne connaissant pas prototype je ne peux te répondre le pourquoi du comment a ce sujet ....
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut
    Ok j'ai ma réponse

    supported from v1.5.1
    Virtually all of CSS3 is supported, with the exception of pseudo-elements (like ::first-letter) and some pseudo-classes (like :hover).
    C'était trop facile sinon va pour la solution pisseuse de code

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 87
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par vodnok Voir le message
    Bonjour,

    Je cherche à tester si un div est survoler par la souris.
    Si c'est pour de simple raison comme modifier le type de curseur ou modifier la background de la div ou du truc de ce genre , je te conseille de faire sa en css en quelque ligne sans ni tester la taille ni gaspiller plein de temps si c'est pour autre chose alors je te dis bon courage , pour le $$ c est pas le framework prototype que tu utilise ?. si c'est le cas , c'est $(nom) qui remplace Document.getElementById(... je pense ,


    bon courage.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par mehdi_scofield Voir le message
    Si c'est pour de simple raison comme modifier le type de curseur ou modifier la background de la div ou du truc de ce genre , je te conseille de faire sa en css en quelque ligne sans ni tester la taille ni gaspiller plein de temps si c'est pour autre chose alors je te dis bon courage , pour le $$ c est pas le framework prototype que tu utilise ?. si c'est le cas , c'est $(nom) qui remplace Document.getElementById(... je pense ,


    bon courage.

    Non non prototype permet d'utiliser $$() et à l'interieur tu peux y mettre beaucoup de chose comme des identificateurs CSS

    $$('.sub') te retourne un tableau avec tous les élements ayant la class .sub
    $$('#sub') te retourne un tableau avec tous les élements ayant comme id sub

    Tu peux également faire des trucs sympas comme

    $$('#monDiv .sub') qui te retourne tous les éléments ayant la class .sub contenu dans #monDiv

    ou encore

    $$('#monDiv .sub:empty') qui te retourne tous les éléments "vide" ayant la class .sub contenu dans #monDiv

    Mais hélas :hover ne fonctionne pas

    Non ce n'est pas pour "juste" modifier le curseur mais pour y affecter un évennement plus complexe.


    Si tu veux plus d'info sur $$ dans prototype va voir ceci


    J'ai créer ma fonction dynHoverWatch(id) qui surveille l'état de survole d'un div et une fonction dynHoverWatchIs(id) qui retourne true ou false

    Dans dynHoverWatch je crée deux évenements (over, out) qui change l'état de l'id dans un tableau. dynHoverTab[id]='y' ou dynHoverTab[id]='n'

    Donc ça fonctionne

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 87
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par vodnok Voir le message

    Si tu veux plus d'info sur $$ dans prototype va voir ceci
    Merci , mais je voulais juste te dire que tout mon PFE( Projet de Fin d'Etude ) j'ai travaillé avec Prototype , et un autre script pour faire le drag & drop (faire un peu d'interactivité sans utilisé le Flash).

    Prototype peut meme faire de l'ajax avec des fonction simple et a plusieur fonction tres utiles qui sont simple à utilisé.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut
    Pas besoin de me convaincre, je l'utilise aussi depuis plus d'un an et ça m'a changé la vie. Je débutais en javascript depuis 2-3 mois et prototype à radicalement accélérer la vitesse de développement. C'est bien simple à ce jour, je n'ai jamais été bloqué ou limité par javascript.

    J'utilise scryptacoulous pour le drag&drop. J'avais fait un drag home made qui fonctionnait bien mais j'ai finalement préféré opter pour scrypta car il est plus complet que ma solution proposée et comme j'avais également besoin d'effet comme slide, fade etc.

    Je n'aime pas le flash et je crois qu'avec du simple html , javascript (avec prototype) ainsi qu'un peu d'imagination on peut faire des merveilles et bien plus léger que du flash. Et comme flash n'est pas surporté sur tous les supports...


    La seule limite actuellement est HTML. Vivement l'apparition des diagonales pour pouvoir faire des perspectives et effet 3D avec de bêtes DIV Mais je crois que ça va venir dans la prochaine version d'HTML avec également le support de la musique et video. Je crois aussi une sorte d'ajax intégré.

    Enfin là c'est du HS mais comme le problème initiale au post est réglé on peut y aller

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 87
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par vodnok Voir le message
    Pas besoin de me convaincre, je l'utilise aussi depuis plus d'un an et ça m'a changé la vie. Je débutais en javascript depuis 2-3 mois et prototype à radicalement accélérer la vitesse de développement. C'est bien simple à ce jour, je n'ai jamais été bloqué ou limité par javascript.

    J'utilise scryptacoulous pour le drag&drop. J'avais fait un drag home made qui fonctionnait bien mais j'ai finalement préféré opter pour scrypta car il est plus complet que ma solution proposée et comme j'avais également besoin d'effet comme slide, fade etc.

    Je n'aime pas le flash et je crois qu'avec du simple html , javascript (avec prototype) ainsi qu'un peu d'imagination on peut faire des merveilles et bien plus léger que du flash. Et comme flash n'est pas surporté sur tous les supports...


    La seule limite actuellement est HTML. Vivement l'apparition des diagonales pour pouvoir faire des perspectives et effet 3D avec de bêtes DIV Mais je crois que ça va venir dans la prochaine version d'HTML avec également le support de la musique et video. Je crois aussi une sorte d'ajax intégré.

    Enfin là c'est du HS mais comme le problème initiale au post est réglé on peut y aller

    Moi aussi je suis fan de Prototype , voila le site depuis lequel j'ai pris un script de drag and drop que j'ai par la suite modifié selon mes besoins http://www.dhtmlgoodies.com

    Vous pouvez trouver plein d'autre script comme des calendrier et plein d'autre truc , voila un demo sur le drag and drop http://www.dhtmlgoodies.com/scripts/...p-quiz-d2.html

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

Discussions similaires

  1. Changer d'image quand la souris survole la zone
    Par laurentSc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 20
    Dernier message: 06/02/2009, 09h37
  2. explication lorsque la souris survolle des liens
    Par infopouet dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/08/2007, 14h15
  3. Réponses: 2
    Dernier message: 25/04/2007, 11h00
  4. Réponses: 2
    Dernier message: 09/05/2006, 10h14
  5. [C#/VB.Net]Afficher message lorsque souris survole contrôle
    Par guillaume16 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/03/2006, 11h44

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