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 :

Placer un cercle svg au bon endroit sur une image


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2018
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2018
    Messages : 166
    Par défaut Placer un cercle svg au bon endroit sur une image
    Ce sujet fait suite à celui-ci

    Résumé de ma recherche : je souhaite réaliser un jeu où le joueur clique sur des éléments d'une image et rentre une réponse, si celle-ci est juste, il marque des points si elle est fausse il perd des vies.
    Je souhaite à présent faire apparaitre les réponses justes sur un radar (pour que le joueur est une vision d'ensemble de toutes les réponses trouvées).

    Le click sur le radar fait apparaitre l'image du jeu en noir et blanc.

    Le jeu

    A cette étape, j'imagine donc qu'il faut que je lui dise de placer un rond (en svg?) à l'endroit où il y avait une map area (qui n'est pas forcément ronde).
    Je pense donc que je dois créer une variable dans la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (result === elClicked["dataset"]["nom"]) {
        let win;
          win="Bravo, c'était bien "+elClicked["dataset"]["nom"];
            // diffère l'affichage de la boîte alert
        setTimeout(() => alert(win), 100);  
        compt += 10;
        document.getElementById("champDuPrompt").innerHTML = compt;
        // (1) suppression de l'écouteur
        elClicked.removeEventListener("click", fonctionSurClic);  // fonctionSurClic est le nom de la fonction appelée
      }
    cette variable doit donner les coordonnées pour un affichage dans la fonction setStateImageFond. Et celle-ci affichera le svg.

    Mon raisonnement tient-il la route?

  2. #2
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2018
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2018
    Messages : 166
    Par défaut
    Est-ce que je peux récupérer les coordonnées du premier point d'une forme définit par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elCliked["dataset"]["nom"]
    ?

    Si c'est le cas, peut-être je peux demander de tracer un cercle en svg à ce point précis.

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 210
    Par défaut
    Bonjour,
    Citation Envoyé par bahh66
    Est-ce que je peux récupérer les coordonnées du premier point d'une forme définit par elCliked["dataset"]["nom"]?
    oui elles sont dans l'attribut coords, pour les rectangles c'est le plus simple puisque avec x0, y0, x1 ,y1, x0 correspond à left et y0 à top.

    Pour les polygones cela peut être différent l'ordre n'aillant pas plus d'importance que cela.

    Pour les cercles c'est comme pour les rectangles.

    Si c'est le cas, peut-être je peux demander de tracer un cercle en svg à ce point précis.
    Pourquoi du SVG quand une simple <div> peut suffire ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2018
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2018
    Messages : 166
    Par défaut
    Bonjour NoSmoking,
    du coup ça donne quoi?

    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
    if (result === elClicked["dataset"]["nom"]) {
    /* je définis un élément qui est associé à la map area["dataset"]["nom"]*/
     
    let cerclereponse= document.getElementById("elClicked["dataset"]["nom"]").coords ;
     
     
        let win;
          win="Bravo, c'était bien "+elClicked["dataset"]["nom"];
            // diffère l'affichage de la boîte alert
        setTimeout(() => alert(win), 100);  
        compt += 10;
        document.getElementById("champDuPrompt").innerHTML = compt;
        // (1) suppression de l'écouteur
        elClicked.removeEventListener("click", fonctionSurClic);  // fonctionSurClic est le nom de la fonction appelée
      }
    pour le tracé du cercle, tu me parles d'utiliser une div? Avec border-radius:50%?
    Je pensais utiliser cerclereponse pour lui dire où le tracer.

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 210
    Par défaut
    du coup ça donne quoi?
    Ça donne quoi quoi ?

    Tu récupères l'élément <area> qui t'intéresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const elemArea = document.getElementById("id-area");
    ..grand classique mais d'autres méthodes peuvent être utilisées.

    Tu récupères la valeur de l'attribut coords :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const strCoords = elemArea.getAttribute("coords");
    ... la méthode getAttribute() va te retourner une String

    Tu converties cette String en Array :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const tabCoords = strCoords.split(",");
    ... on utilise la méthode classique split().

    Enfin les positions left et top sont aux indices 0 et 1 de ton tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const left = tabCoords[0];
    const top = tabCoords[1];
    ... aux restrictions prêtes que j'ai déjà indiquées.

    Il ne te reste plus qu'a créer et à positionner une <div> à cette position :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    const elCircle = document.createElement("DIV");
    elCircle.style.left = left + "px";     // il faut ajouter l'unité pour utiliser pour style 
    elCircle.style.top = top + "px";
    elCircle.style.position = "absolute";  // pour qu'il puisse être correctement placé
    // et enfin ajout au parent prévu
    elementDestination.append(elCircle)
    Voilà qu devrait te permettre de poursuivre.

    Nota : pour tout ce qui est cosmétique, border, color..., tu peux passer par l'ajout d'une classe CSS.

  6. #6
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2018
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2018
    Messages : 166
    Par défaut
    Ça donne quoi quoi ?
    je pensais être clair, ça donne quoi était pour le code qui était en dessous du coup.

    J'ai essayé d'utiliser les codes que tu as super bien expliqué.
    Mais il y a quelque chose que je ne comprends quand même pas.

    Tu récupères les coordonnées de l'area (id-area doit être remplacé par le nom de l'area, non?) et tu les mets dans un tableau.
    Tu crées une div à cette position.

    Mais tout ceci tu le fais à quel moment, uniquement quand la bonne réponse est donnée ou n'importe quand? Du coup je l'ai mis dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (result === elClicked["dataset"]["nom"]) {
    mais ça m'a l'air pas à sa place
    Je me dis aussi qu'il faudrait que la div soit plutot dans la fonction setStateImageFond, vu que le cercle ne s'affiche que sur l'image en noir et blanc normalement?

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

Discussions similaires

  1. Placer des points sur une image
    Par vallgui dans le forum WinDev
    Réponses: 9
    Dernier message: 22/01/2008, 15h19
  2. placer des balise xml au bon endroit dans le fichier existant.
    Par calimero91 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 07/01/2008, 09h43
  3. placer un filtre de couleur sur une image
    Par mm2405 dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 06/12/2007, 11h25
  4. placer du texte sur une image
    Par sandytarit dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 23/12/2006, 14h38
  5. Réponses: 8
    Dernier message: 07/08/2006, 17h40

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