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 :

Cadre avec animation lorsqu'il se rempli


Sujet :

jQuery

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 114
    Par défaut Cadre avec animation lorsqu'il se rempli
    Mon titre n'est pas très explicite mais j'aurai aimé trouver un script de ce genre.

    J'ai mon petit cadre, un <div> en gros, de ce style :

    Et lorsque je le rempli en javascript, il se déforme pour prendre une autre taille, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     ________
    |       |
    | Image |
    |       |
    | Texte |
    |       |
    |_______|
    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
    Par défaut
    le problème est qu'il te faut une taille fixe au moins en largeur car le texte s'adapte a son conteneur

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 114
    Par défaut
    Oui oui je sais, j'ai pas été assez explicite en fait.

    J'aurai aimé que le div s'agrandisse mais avec un effet, par exemple, il s'adapte en largeur, puis en longueur et enfin affiche le contenu

  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
    Par défaut
    lol si j'ai bien compris

    Mais il faut connaitre la largeur du texte ... la hauteur peut se gèrer mais pas la largeur ...

    pour l'effet c'est faisable sinon ...

  5. #5
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Salut,

    Ce que tu peux essayer c'est de remplir un div caché avec ton nouveau contenu,
    puis tu en mesure la largeur et la hauteur. (clientWidth et clientHeight)

    ensuite tu contraints les deux dimensions de ton div (où tu veux injecter le nouveau contenu) avec sa taille actuelle puis avec un setInterval tu modifies
    ses dimensions pour atteindre celles de la nouvelle taille.

    Tu peux décider d'afficher le nouveau contenu que lorsque le div a la bonne
    taille. Si tu le fais avant il n'y aura probablement pas la place et tes textes
    passeront à la ligne et se réorganiseront en cours d'animation, cela risque de
    produire un effet visuel par terrible. Le contenu débordera de ton div si il n'a
    pas la place.

    Tu peux envisager d'imbriquer deux div, celui de l'extérieur serait en overflow
    hidden et celui de l'intérieur aurait les dimensions finales, ainsi pendant l'anim
    du div extérieur, le div intérieur (si il a déjà les dimensions finale) sera simplement
    "clippé" et ça devrait donner un meilleur effet.

  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
    Par défaut
    +1 avec marcha , a une exception faite , si je ne dis pas de bétise , lorsqu'un élément est en style.display.none, on ne peut récupérer sa taille/hauteur :-/

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 646
    Billets dans le blog
    20
    Par défaut
    lorsqu'un élément est en style.display.none, on ne peut récupérer sa taille/hauteur
    Tout à fait, il faut passer par visibility: hidden.
    De même,
    Ce que tu peux essayer c'est de remplir un div caché avec ton nouveau contenu,
    puis tu en mesure la largeur et la hauteur. (clientWidth et clientHeight)
    c'est plutôt offsetHeight / offsetWidth non ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  8. #8
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Exemple avec la première méthode citée et à adapter :


    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
     
    <head>
      <title></title>
      <script language="JavaScript" src="jquery-1.3.min.js" type="text/javascript"></script>
      <script language="JavaScript" type="text/javascript">
      /*<![CDATA[*/
        $(document).ready(function()
        {
            $("input").click(function() {
                $("#boite").html($("#texte").html());
                $("#boite").animate({
                                      width: $("#texte").width(),
                                      height: $("#texte").height()
                                    }, 1500 );
            });
        });
      /*]]>*/
      </script>
    </head>
     
    <body>
        <div id="boite" style="width:100px; height: 100px; overflow:hidden">Petit test</div>
        <div id="texte" style="visibility:hidden;display:none">
            Iamque lituis cladium concrepantibus internarum non celate ut antea turbidum saeviebat ingenium a veri consideratione detortum et nullo inpositorum vel conpositorum fidem sollemniter inquirente nec discernente a societate noxiorum insontes velut exturbatum e iudiciis fas omne discessit, et causarum legitima silente defensione carnifex rapinarum sequester et obductio capitum et bonorum ubique multatio versabatur per orientales provincias, quas recensere puto nunc oportunum absque Mesopotamia digesta, cum bella Parthica dicerentur, et Aegypto, quam necessario aliud reieci ad tempus.
        </div>
        <input type="button" value="Mettre à jour" />
    </body>
     
    </html>

  9. #9
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    +1 pour visibilty hidden

    J'ajouterai qu'il faudrait mettre cet élément temporaire en position absolute
    pour pas qu'il perturbe le flux du document suivant où on le place dans le DOM

    Citation Envoyé par Bovino Voir le message
    c'est plutôt offsetHeight / offsetWidth non ?
    offsetHeight va comprendre l'épaisseur de la bordure, alors que clientHeight non.
    Tout deux incluent le padding. (je crois aussi que les scrollbars influent différement entre ces deux fonctions)

    Je pense que cela n'a pas grande importance pour faire la mesure des dimensions dans ce cas, mais il faut faire attention à ce que cet élément
    temporaire ne soit pas "stylé"

    J'ai été surpris en cherchant un peu, que clientHeight etc... ne sont pas des
    recommandations du w3c et ont été initialement implémentés dans IE.

    Puisqu'on parle de JQuery ici, autant regarder le plugin Dimension

  10. #10
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 646
    Billets dans le blog
    20
    Par défaut

    Ce que tu peux essayer c'est de remplir un div caché avec ton nouveau contenu,
    puis tu en mesure la largeur et la hauteur. (clientWidth et clientHeight)
    ce sont les dimensions de la div que tu veux, pas celles de la fenêtre ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  11. #11
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Ce sera peut-être plus clair avec un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $(document).ready(function() {
    	var temp = $('<div></div>')
    	.css({ visibility: 'hidden', position: 'absolute' })
    	.html("Le contenu futur<br />de taille<br />inconue")
    	.appendTo(document.body);
     
    	alert(temp[0].clientWidth + ' ' + temp[0].clientHeight);
    });

  12. #12
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Voici mon idée intégrée au code fourni par Kerod

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>Test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <script type='text/javascript' src='/libs/jquery-1.2.6.js'></script>
    <script type='text/javascript'>
    $(document).ready(function()
    {
    	$("input").click(function() {
     
    		// à remplacer par une requête AJAX
    		var nouveau_contenu = "Iamque lituis cladium concrepantibus internarum <br />non celate ut antea turbidum saeviebat <br />ingenium a veri consideratione <br />";
     
    		// Mesure du contenu
    		var temp = $('<div></div>')
    		.css({ visibility: 'hidden', position: 'absolute' })
    		.html(nouveau_contenu)
    		.appendTo(document.body);
    		var new_width = temp[0].clientWidth;
    		var new_height = temp[0].clientHeight;
    		temp.remove();
     
    		// boite interne de taille finale
    		var interne = $('<div></div>').css({ width: new_width + 'px', height: new_height + 'px' }).html(nouveau_contenu);
     
    		// animation de la boite externe
    		$("#boite").empty().append(interne).animate({
    		  width: new_width,
    		  height: new_height
    		}, 1500 );
    	});
    });
    </script>
    </head>
    <body>
    <input type="button" value="Mettre à jour" />
    <div id="boite" style="width:100px; height: 100px; border: 1px solid black; overflow:hidden">Petit test</div>
    </body> 
    </html>

  13. #13
    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
    Par défaut
    j'en reviens au fait qu'il serait préférable de fixer les dimensions de la boite dès le départ , quitte a adapter en fonction de la taille de l'écran et passer en overflow vertical ....

    moi ce que j'en dis ^^

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 114
    Par défaut
    En fait l'animation ne doit se faire qu'en vertical, je test vos propositions dès demain, merci à vous

  15. #15
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Ben tu retires le paramètres width est c'est bon

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

Discussions similaires

  1. [FLASH MX2004] Cadres et animation extensibles!
    Par Bekurute dans le forum Flash
    Réponses: 13
    Dernier message: 29/10/2005, 14h56
  2. Cadre avec scrollbarre
    Par Funraill.net dans le forum Langage
    Réponses: 3
    Dernier message: 21/10/2005, 13h13
  3. [POO] Class Défilementa automatique d'images avec animation
    Par rakoto.n dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 14/01/2005, 18h21

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