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 :

Afficher / Cacher Div + Effet sur Texte


Sujet :

JavaScript

  1. #1
    Membre émérite Avatar de HiRoN
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 035
    Points : 2 589
    Points
    2 589
    Par défaut Afficher / Cacher Div + Effet sur Texte
    Bonjour,

    A partir d'un script que j'ai repris & amélioré, j'affiche ou cache un div en cliquant sur un lien (a href). J'ai ajouté un effet sur la taille de la police pour qu'elle grossisse (ou se réduise) "proportionnellement" à la taille du block.

    J'ai donc tenté de rendre le block plus ou moins "générique" de façon à ce que peut importe la taille de mon block, la taille du texte soit toujours la même.

    Un petit exemple de mon script en ligne : ici (voir la source pour afficher l'intégralité du code)

    Plusieurs problèmes :

    1 - Sous IE, on peut ouvrir / fermer le Div mais 1 seule fois (après ça plante, la page contient une erreur mais je n'arrive pas à la corriger).
    2 - sous IE un espace se crée sous le div (+ il est grand, + l'écart est important).
    3 - Sous IE, il ne me prend pas en compte le CSS (qui est correctement compris sous Firefox).

    4 (Bonus) - Je donne en paramètre le nombre de ligne (je calcule avec le script grossièrement la taille totale du block en fonction = police 13px + marge 5px x nbre de ligne), comment mieu ajuster cette taille ?

    N'étant pas un expert en Javascript, je me tourne vers vous en espérant finaliser correctement mon script
    Je suis preneur de toutes corrections sur les 4 points énoncés + haut (surtout la 1ere, afin que l'ouverture / fermeture soit correctement exécuté)

    Cordialement,
    Pensez à utiliser les ressources disponibles en Dev. Web :
    (x)HTML : Cours (X)HTML / FAQ (X)HTML
    CSS : Cours CSS / FAQ CSS / Galerie CSS
    Javascript : Cours / FAQ / Sources
    Mon site : Développeur Web Freelance

  2. #2
    Rédacteur

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

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Bonjour,
    Désolé, j'ai pas trop le temps de regarder ton code en détail, mais j'avais créé une petite fonction similaire il y a quelque temps, donc tu peux l'adapter et l'utiliser.
    En revanche, elle n'ouvre et ferme que verticalement, mais ça doit pas être trop compliqué de faire un effet horizontal en parallèle...
    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
    var restaure = new Array;
    window.onload=function(){
    	restaure['zone2'] = document.getElementById('zone2').offsetHeight;
    	document.getElementById('zone2').style.height = '0px';
    	document.getElementById('zone2').style.overflow = 'hidden';
    	document.getElementById('zone2').style.display = 'none';
    }
    function swap(elmt){
    	elt=document.getElementById(elmt);
    	if(elt.style.display=='none'){
    		var taille = restaure[elmt];
    		elt.style.display = '';
    		var timer = setInterval(function(){
    			if(taille>elt.offsetHeight){elt.style.height=(elt.offsetHeight+5)+'px'}
    			else{elt.style.height='auto';clearInterval(timer)}
    		},1);
    	}
    	else{
    		var taille = elt.offsetHeight;
    		restaure[elmt] = taille;
    		elt.style.overflow='hidden';
    		var timer = setInterval(function(){
    			if(taille>=5){elt.style.height=taille+'px';taille-=5;}
    			else{elt.style.display='none';clearInterval(timer)}
    		},1);
    	}
    }
    Explications :
    Tu initialises d'abord un tableau élément/taille pour stocker les dimensions initiales de tes éléments.
    Dans le onload, tu stockes les tailles des éléments que tu souhaites cacher par défaut.
    Tu appelles la fonction swap(element) avec comme paramètre l'id de l'élément que tu veux afficher/masquer.

    Voilà, si tu as des questions, n'hésites pas
    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

  3. #3
    Membre émérite Avatar de HiRoN
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 035
    Points : 2 589
    Points
    2 589
    Par défaut
    Salut Bovino et merci pour ta réactivité.
    Je vais analyser ton script dès que j'ai un moment
    Pensez à utiliser les ressources disponibles en Dev. Web :
    (x)HTML : Cours (X)HTML / FAQ (X)HTML
    CSS : Cours CSS / FAQ CSS / Galerie CSS
    Javascript : Cours / FAQ / Sources
    Mon site : Développeur Web Freelance

  4. #4
    Membre émérite Avatar de HiRoN
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 035
    Points : 2 589
    Points
    2 589
    Par défaut
    @Bovino : En effet script sympa. Mais, lors de la 1ere ouverture (autant sous FF que IE), l'effet "progressif" ne se fais pas. Une idée ?

    Néanmoins, fonctionne très bien sous sous FF & IE avec de multiples ouvertures à la différence du mien

    Je vais voir pour rajouter mon effet sur le grossissement / réduction des lettres en même temps, mais bon, j'ai bien galéré pour réussir sur le mien

    EDIT : J'ai peut-être mal fais quelque chose, serait-il possible d'avoir l'intégralité du code ? (avec appel côté HTML)
    Pensez à utiliser les ressources disponibles en Dev. Web :
    (x)HTML : Cours (X)HTML / FAQ (X)HTML
    CSS : Cours CSS / FAQ CSS / Galerie CSS
    Javascript : Cours / FAQ / Sources
    Mon site : Développeur Web Freelance

  5. #5
    Rédacteur

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

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Oui, si tu as mis un display:'none' en css, du coup, à l'ouverture de la page, la hauteur enregistrée est 0px, donc à la 1re ouverture, c'est uniquement le height auto qui s'affiche j'imagine...
    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

  6. #6
    Membre émérite Avatar de HiRoN
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 035
    Points : 2 589
    Points
    2 589
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Oui, si tu as mis un display:'none' en css, du coup, à l'ouverture de la page, la hauteur enregistrée est 0px, donc à la 1re ouverture, c'est uniquement le height auto qui s'affiche j'imagine...
    C'était en effet cela le problème, j'avais capté entre temps.
    Reste à adapter mon effet sur la police. Si tu as des idées, je suis preneur
    Pensez à utiliser les ressources disponibles en Dev. Web :
    (x)HTML : Cours (X)HTML / FAQ (X)HTML
    CSS : Cours CSS / FAQ CSS / Galerie CSS
    Javascript : Cours / FAQ / Sources
    Mon site : Développeur Web Freelance

  7. #7
    Rédacteur

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

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Je pense que tu peux reprendre le même principe d'un tableau stockant les valeurs par défaut, ensuite, quand tu lances la fonction, tu affecte un facteur proportionnel de la diminution de la taille de la fenêtre sur la police...
    En résumé (pour la disparition), tu crée la variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rapport=5*taille_police/taille_div
    (le 5*, c'est la valeur du pas que j'ai donné), puis dans la fonction, tu affectes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elt.style.fontSize-=rapport
    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
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    pouvez vous me dire ce qu'il faut modifier pour que a la première visualisation il n'y ai pas ce problème d'agrandissement non progressif.

    J'ai regardé du coté du diplay:none mais rien n'a faire

    En faite lors du premier clique j'ai l'impression qu'il commence bien au début a ouvrir le Div pendant 1/2 seconde puis il affiche tout.
    Par contre ensuite sa passe nickel.

    Merci !!

  9. #9
    Rédacteur

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

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Tu peux n'affecter le display: none qu'après le stockage de la page, mais du coup, à l'affichage, ton élément est affiché furtivement puis caché, du coup, pour parer aussi à cela, tu peux affecter un z-index (si c'est possible) négatif au départ puis le remettre à une valeur 'visible' après avoir affecté le display none.
    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

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 76
    Points : 55
    Points
    55
    Par défaut
    Bonjour,

    Avez-vous réussi à réaliser votre effet d'affichage Javascript ?

    Si oui, pouvez-vous m'aider à mettre en place un effet identique ?

    Merci de votre aide,
    Michael

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

Discussions similaires

  1. Composants WPF pour effets sur textes
    Par Nixeus dans le forum Windows Presentation Foundation
    Réponses: 15
    Dernier message: 28/01/2011, 09h31
  2. [AC-2007] TDC : afficher/cacher détails que sur une ligne
    Par Tyu38 dans le forum VBA Access
    Réponses: 0
    Dernier message: 24/06/2010, 13h56
  3. afficher cacher div
    Par calitom dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 06/03/2007, 11h35
  4. Réponses: 10
    Dernier message: 22/11/2006, 14h17
  5. afficher / cacher div
    Par Cruelo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/11/2004, 13h48

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