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 :

Afficher un texte sur une image json


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 8
    Par défaut Afficher un texte sur une image json
    Bonjour à tous,

    Je souhaiterais faire en sorte que lorsque la souris passe sur une image, un texte s'affiche sur mon site.

    Voilà mon code html :
    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
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
     <head>
        <meta charset="utf-8">
        <link rel="stylesheet" href="style.css">
        <title>Dogs</title>
       <div id="entête">
            <h1>
         Only for dog lovers !
       </h1>       
         <h2>
           Check out here all dogs breeds : one cookie if you catch animals who aren't.
         </h2>
       </div>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta name="author" content="http://radservebeer.free.fr" /> <meta name="generator" content="PSPad editor, www.pspad.com" /> <style type="text/css"> .texte { display:none; } a:hover span { display: block; }</style> 
      </head>
     
      <body>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script src="script.js"></script>
     
        <div id="main">
          <div id="menu">
           Menu
           </div>
            </div>
     
        <div id="contenu">
         Contenu
          <div class="img-container">
          </div>
          </div>
     
        <div id="footer">
         Pied de Page
          </div>
     
        <div align="center"> <p><a href="url">Chien <span class="texte"> Ceci est un chien</span></a></p> </div> 
      </body>
    </html>

    Et js :
    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
     
    $(document).ready(function(){
     
    	var dogs,body=$( "body" )
    	,dog,imgContainer,img
    	,dogsdata=$( "<p class='dogs-data'></p>" );
     
    	$.getJSON( "https://api.thedogapi.com/v1/images/search?limit=100&page=1000&order=Desc", function( json ) {
    	    console.log( json ); // print data in the console
    	    dogs = json; //the variable dogs uses the document json 
     
    	    for( var i = 0; i< json.length; i = i + 1 ) {   // loop through each dogs in our "breeds" array
     
    		dog = dogs[ i ];     // store the current dog in a variable
    		imgContainer = $( "<div class='img-container'></div>" ); // we create a container for the dog image and its data
    		img = $( "<img>" );     // we create a jQuery object with an "img" element
    		img.attr( "src", dog.url);   // set its "src" attribute with a jquery method
    		imgContainer.append( img );     // and append this element to our container
    		dogsdata.html( dog.breeds[0]?dog.breeds[0].name:"" );     // set its inner HTML with jQuery
    		imgContainer.append( dogsdata );     // and append this to our container
    		body.append( imgContainer );     // finally we append the container to the "body" of our document
    	    }
          });
     
    });
    Or j'aimerais savoir comment faire pour que chaque image lorsque l'on passe la souris dessus affiche les paramètres json associés = par exemple ici ce serait afficher le .breeds.name et d'autres informations contenues dans le json associées à cet image en particulier.

    Moi ce que j'aurais fait ça aurait été utiliser l'algorithme js avec le for pour implémenter cette procédure. Seulement je suis incapable de le formuler avec du code..

    Pourriez-vous m'aider ??

    Merci d'avance

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    La première chose que tu dois faire c'est de corriger ton code html, parce que là c'est la cata.

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Pour ce qui est de l'affichage au survol de l'image, tu peux le faire en utilisant uniquement les css avec la pseudo classe :hover, le sélecteur d'adjacence ~ et la propriété visibility, exemple:
    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
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8"/>
        <title>Dogs</title>
        <link rel="stylesheet" href="style.css"/>
     
        <style type="text/css">
    .img-container img {
        height: 20vh;
    }
     
    .img-container img:hover ~ .dog-data {
        visibility: visible;
    }
     
    .dog-data {
        visibility: hidden;
    }
        </style> 
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script src="script.js"></script>
    </head>
    <body>
        <div id="header">
            <h1>Only for dog lovers !</h1>       
            <h2>Check out here all dogs breeds : one cookie if you catch animals who aren't.</h2>
        </div>
     
        <div id="main">
            <div id="menu">Menu</div>
        </div>
     
        <div id="contenu">
            Contenu
            <div id="doglist"></div>
        </div>
     
        <div id="footer">
            Pied de Page
        </div>
    </body>
    </html>
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $(document).ready(function() {
        $.getJSON( "https://api.thedogapi.com/v1/images/search?limit=100&page=1000&order=Desc", function( json ) {
            var doglist = $('#doglist');
            // for (var i = 0, imax = json.length; i < imax; i++) {
            for (var i = 0, imax = 4; i < imax; i++) {
                var item = $('<div class="img-container"><img src="' + 
                             json[i].url + 
                             '"><p class="dog-data">' +
                             ( json[i].breeds[0] ? json[i].breeds[0].name : "" ) +
                             '</p>');
                doglist.append(item);
            }
        });
    });

  4. #4
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 8
    Par défaut
    Bonjour, merci beaucoup, cela fonctionne en effet !

    J'aurais juste quelques questions :

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .img-container img:hover ~ .dog-data {
        visibility: visible;
    --> à quoi sert la petite vague ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var doglist = $('#doglist');
             for (var i = 0, imax = 4; i < imax; i++) {
                var item = $('<div class="img-container"><img src="' + 
                             json[i].url + 
                             '"><p class="dog-data">' +
                             ( json[i].breeds[0] ? json[i].breeds[0].name : "" ) +
                             '</p>');
                doglist.append(item);
            }
        });
    });
    --> imax c'est bien le nombre d'images max ?
    --> i représente le numéro de tableau js si je ne me trompe pas ?
    --> que signifie i++ = incrémentation ?
    --> je ne comprend pas bien ce code là sur son écriture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     var item = $('<div class="img-container"><img src="' + 
                             json[i].url + 
                             '"><p class="dog-data">' +
                             ( json[i].breeds[0] ? json[i].breeds[0].name : "" ) +
                             '</p>');
    Merci d'avance !

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Bonjour,
    il faut faire de temps en temps un effort de lecture/recherche, on ne peut pas toujours tout faire pour vous
    --> à quoi sert la petite vague ?
    Explication fournie par CosmoKnacki dans sa réponse.

    --> imax c'est bien le nombre d'images max ?
    --> i représente le numéro de tableau js si je ne me trompe pas ?
    --> que signifie i++ = incrémentation ?
    Les meilleurs cours et tutoriels pour apprendre le JavaScript

    --> je ne comprend pas bien ce code là sur son écriture :
    Comment puis-je créer un nouvel élément du DOM ?


    De plus si tu utilises jQuery alors il y a la documentation officielle, très bien faite et pleine d'exemples.

  6. #6
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    La petite vague ~ s'appelle un tilde (de même ^ n'est pas un petit chapeau chinois, mais un accent circonflexe). Quant à son utilité, je l'ai dit dans mon précédent post: c'est un sélecteur css d'adjacence (un sélecteur d'adjacence indirecte pour être précis) et une recherche te donnera tous les renseignements à ce sujet.

    imax c'est bien le nombre d'images max ?
    Oui c'est bien ça, dans mon exemple je l'ai fixé à 4 en dur pour limiter le temps de chargement, mais pour avoir toutes les images, il faut commenter (ou effacer) cette ligne et dé-commenter la précédente:for (var i = 0, imax = json.length; i < imax; i++) {.

    L'intérêt de cette variable imax et de cette écriture particulière de la boucle for est de simplifier l'évaluation de la condition d'arrêt de la boucle qui, sans elle, s'écrirait i < json.length. Mais tu peux très bien l'écrire for (var i = 0; i < json.length; i++) { (après tout l'accès à la propriété length du tableau json ne doit pas être si coûteuse que ça, mais cette manière de faire est bonne à connaître).

    --> i représente le numéro de tableau js si je ne me trompe pas ?
    Oui, si tu veux, sauf que le terme précis est l'index du tableau.
    --> que signifie i++ = incrémentation ?
    C'est ça. Ça vient directement du langage C dont javascript s'est très largement inspiré, comme beaucoup d'autres langages, pour sa syntaxe.


    --> je ne comprend pas bien ce code là sur son écriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     var item = $('<div class="img-container"><img src="' + 
                  json[i].url + 
                  '"><p class="dog-data">' +
                  ( json[i].breeds[0] ? json[i].breeds[0].name : "" ) +
                  '</p>');
    Il n'y a rien de bien mystérieux: lorsque tu passes en argument du constructeur jQuery() (ou de l'alias $()) une chaîne de caractère html, celui-ci parse la chaîne et renvoie un objet jQuery contenant le ou les nœuds DOM correspondants. La condition pour que le constructeur remarque qu'il s'agisse bien de html et pas d'un sélecteur, est que la chaîne commence par <nomdetag ...>.
    Néanmoins tu peux aussi préciser de manière explicite qu'il s'agit bien de html en écrivant: $.parseHTML(chainehtml) à la place de $(chainehtml), mais c'est moins concis.

Discussions similaires

  1. [HTML][DREAMWEAVER] Texte sur une image
    Par Nicos77 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 12/10/2005, 09h43
  2. Centrer un texte sur une image créée dynamiquement
    Par rigolman dans le forum Langage
    Réponses: 7
    Dernier message: 11/10/2005, 17h22
  3. Positionnement de texte sur une image
    Par inddzen dans le forum Windows
    Réponses: 2
    Dernier message: 08/08/2005, 12h22
  4. [HTML]Peut-on écrire un texte sur une image ?
    Par flogreg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 28/02/2005, 17h24
  5. [VB.NET] [WinForms] Afficher un rectangle sur une image
    Par Noodles dans le forum Windows Forms
    Réponses: 3
    Dernier message: 20/12/2004, 10h36

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