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

jQuery Discussion :

cliquer sur un objet : var click


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Janvier 2022
    Messages : 5
    Par défaut cliquer sur un objet : var click
    Bonjour,
    J'essaye de faire en sorte que quand je clique sur un objet (donc dans mon cas c'est sur un trait qui joue le role d'un mur) il reste dans la couleur #FF0000.
    J'ai réussie à faire fonctionner hover (donc quand je survole l'élément il apparait bien en couleur #008cba) mais pas click.

    Code JavaScript : 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
     
    var wallColorHover = "#008cba";
    var wallColorClicked = "#FF0000"; 
     
    FloorplannerView.prototype.drawWall = function (wall) {
                    var hover = (wall === this.viewmodel.activeWall);
                    var click = (wall === this.viewmodel.activeWall);
                    var color = wallColor;
                    if (hover && this.viewmodel.mode == Floorplanner.floorplannerModes.DELETE) {
                        color = deleteColor;
                    }
                    else if (hover) {
                        color = wallColorHover;
                    }
                    else if (click) {
                        color = wallColorClicked;
                    }
                    this.drawLine(this.viewmodel.convertX(wall.getStartX()), this.viewmodel.convertY(wall.getStartY()), this.viewmodel.convertX(wall.getEndX()), this.viewmodel.convertY(wall.getEndY()), hover ? wallWidthHover : wallWidth, color, click ? wallWidth : wallWidth, color);
                    if (!hover && wall.frontEdge) {
                        this.drawEdge(wall.frontEdge, hover);
                    }
                    if (!hover && wall.backEdge) {
                        this.drawEdge(wall.backEdge, hover);
                    }
                    if (!click && wall.frontEdge) {
                        this.drawEdge(wall.frontEdge, click);
                    }
                    if (!click && wall.backEdge) {
                        this.drawEdge(wall.backEdge, click);
                    }
                };
     
    FloorplannerView.prototype.drawTarget = function (x, y, lastNode) {
                    this.drawCircle(this.viewmodel.convertX(x), this.viewmodel.convertY(y), cornerRadiusHover, cornerColorHover);
                    if (this.viewmodel.lastNode) {
                        this.drawLine(this.viewmodel.convertX(lastNode.x), this.viewmodel.convertY(lastNode.y), this.viewmodel.convertX(x), this.viewmodel.convertY(y), wallWidthHover, wallColorHover, wallColorClicked);
                    }
                };

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Bonjour,
    • quelle bibliothèque utilises-tu ?
    • comment gères-tu les événements hover et click?
    • pourquoi les affectations sur ces lignes sont identiques ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var hover = (wall === this.viewmodel.activeWall);
    var click = (wall === this.viewmodel.activeWall);
    ... dans ce cas click est égal à hover !?!

  3. #3
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Janvier 2022
    Messages : 5
    Par défaut
    quelle bibliothèque utilises-tu ?
    J'utilise jQuery

    Code javascript : 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
    jQuery.fn.extend({
    	hover: function( fnOver, fnOut ) {
    		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
    	},
     
    	bind: function( types, data, fn ) {
    		return this.on( types, null, data, fn );
    	},
    	unbind: function( types, fn ) {
    		return this.off( types, null, fn );
    	},
     
    	delegate: function( selector, types, data, fn ) {
    		return this.on( types, selector, data, fn );
    	},
    	undelegate: function( selector, types, fn ) {
    		// ( namespace ) or ( selector, types [, fn] )
    		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
    	}
    });
    J'utilise également Bootstrap.

    Merci de votre réponse !

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Tu n'as pas vraiment répondu à mes questionnements, mais bon !

    Il existe une hiérarchie dans les événements de la souris, « hover » apparaitra toujours avant un « click », de plus le « click » est éphémère et le « hover » existera même lors du « click ».

    Il est tout à fait possible de parer à tout ceci en passant par l'ajout/retrait d'un flag ou l'ajout/retrait d'une classe CSS.

    Petit exemple simple d'une façon de gérer cela :
    Code html : 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
    47
    48
    49
    50
    51
    52
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Color click and over</title>
    <meta name="Author" content="NoSmoking">
    <meta name="DVP-discussion" content="d2125790">
    <style>
    .cadre {--ep: 1em;--long: 20em;position: relative;width: var(--long);height: var(--long);margin: auto;background-color: #F5F5F5;cursor: pointer;}
    .mur-v, .mur-h {position: absolute;top: 0;left: 0;background-color: #AAA;}
    .mur-v {width: var(--ep);height: calc(var(--long) - var(--ep));}
    .mur-h {width: calc(var(--long) - var(--ep));height: var(--ep);}
    .right {right: 0;left: auto;}
    .bottom {top: auto;bottom: 0;left: var(--ep);}
    .left {top: var(--ep);}
    .mouseover {background-color: #08B;}
    .clicked {background-color: #F00;}
    </style>
    </head>
    <body>
    <div class="cadre">
      <div class="mur-h top"></div>
      <div class="mur-v right"></div>
      <div class="mur-h bottom"></div>
      <div class="mur-v left"></div>
    </div>
    <script>
    const murs = document.querySelectorAll(".cadre div");
    function handleMur(e) {
      const el = e.target;
      let className;
      switch (e.type) {
        case "click":
          className = "clicked";
          break;
        case "mouseenter":
        case "mouseleave":
          className = "mouseover";
          break;
      }
      className && el.classList.toggle(className);
    }
    const events = ["click", "mouseenter", "mouseleave"];
    murs.forEach((el) => {
      events.forEach((ev) => {
        el.addEventListener(ev, handleMur);
      });
    });
    </script>
    </body>
    </html>
    tu noteras que l'ordre de déclaration des classes CSS mouseover et clicked n'est pas anodin.

    A voir si tu peux transposer cela à ton contexte.

Discussions similaires

  1. Tutoriel OpenGL Moderne - cliquer sur un objet avec un hack OpenGL
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 04/12/2014, 15h14
  2. Tutoriel OpenGL Moderne - cliquer sur un objet avec une fonction personnalisée
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 23/11/2014, 14h13
  3. Tutoriel OpenGL Moderne - cliquer sur un objet avec une bibliothèque physique
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 23/11/2014, 13h57
  4. click sur un objet DataGrid
    Par vince29 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 13/01/2009, 16h08
  5. Réponses: 5
    Dernier message: 12/04/2005, 13h54

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