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 :

Attendre le chargement d'un contenu dans une div


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Par défaut Attendre le chargement d'un contenu dans une div
    Bonjour a tous,

    Voila je suis actuellement sur un projet qui est de développer ma propre version d'une dialog box (en gros une div en position absolute qui contient du texte et des images)

    Pour cela j'ai utiliser cette méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $('<div id="dialogBox"></div>').appendTo('body').html('un contenu html avec image <img src="Source.gif">');
    $('#'+config.boxId).css({
        position:'absolute'
    });
    Le problème est que je souhaite possitionner cette boite au milieu du l'ecran.
    Pour cela je regarde la largeur et la hauteur de la box "dialogBox" avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    console.log($('#'+config.boxId).width());
    console.log($('#'+config.boxId).height());
    Et c'est la que je me rend compte que le résultat donné correspond a la hauteur et la largeur de la box avant le chargement de l'image.

    Ma question est donc, peut-on attendre le chargement complet d'une div avant de regarder sa hauteur et sa largeur ?

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    en tablant sur le fait que le plus long à charger sera l'image, tu peux essayer de passer par le onload de l'image ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Par défaut
    le problème c'est que c'est un contenu dynamique qui est chargé, donc je ne peut pas mettre de onload sur les images :s

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    donc je ne peut pas mettre de onload sur les images
    Ha bon pourquoi donc ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $('<div id="dialogBox"></div>').appendTo('body').html('un contenu html avec image <img src="Source.gif" onload ="....">');
    sinon avec jquery:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $('<div id="dialogBox"></div>').appendTo('body').html('un contenu html ">');
    $('#dialogbox').append($('<img />').attr('src','source.gif').load(function(){ ...})
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Par défaut
    pour ce qui est du onload sur l'image ce n'est pas possible car c'est un contenu dynamique qui est chargé ( il peut y avoir 1,2,3 ou X image en chargement )

    Donc pour la deuxième solution ce n'est pas non plus possible :s.

    Mon but et de charger un contenu html.

    Imaginons je suis sur un formulaire, je fais des vérifications et la j'ai une erreur. La dialog box s'affiche avec un texte préformaté html, d'ou l'impossibilité de mettre des onload

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    je ne vois toujours pas de contre indications qu'il y ait une ou 15 images
    il suffit d'incrémenter un compteur pour savoir quand la dernière image est chargée ???

    Sinon l'idéal serait de passer par un evènement jquery avec un callBack comme load ...
    Si tu peux générer coté serveur ton bout de code html ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Citation Envoyé par neoxen Voir le message
    Ma question est donc, peut-on attendre le chargement complet d'une div avant de regarder sa hauteur et sa largeur ?
    Bonjour

    Je vous suggère d'étudier le code de cet exemple : http://www.developpez.net/forums/d82...y/#post5830691.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Par défaut
    merci pour le lien danielhagnoul, je n'est pas trouvé ce que je cherché mais je vais étudier un peu le système je pense avoir eu une idée

  9. #9
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Je pensais que l'exemple du positionnement (en deux étapes) du dialogue modal reteindrait votre attention. Mais si vous avez trouvé mieux...

    Extrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                    objPopup
                        .css("width", popupWidth)
                        .prepend('<img src="http://sohtanaka.developpez.com/tutoriels/javascript/creez-fenetre-modale-avec-css-et-jquery/fichiers/close_pop.png" class="popup-btn-close" title="Close Window" alt="Close" />')
                        .css({
                            // Si l'on regroupe les deux blocs CSS, le popup n'est pas bien positionné
                            // Le popup doit avoir sa taille définitive avant le calcul de outerHeight et de outerWidth
                            "margin-top":  -objPopup.outerHeight(true)/2,
                            "margin-left": -objPopup.outerWidth(true)/2
                        })
                        .fadeIn();

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Par défaut
    j'ai effectivement vu cet exemple mais j'ai procéder autrement

    dans mon objet de creation de la dialog box j'ai fait comme ceci :

    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
    42
    43
    44
     
    this.create=function(){
    	$('<div id="shadow_'+ config.boxId +'"></div>').appendTo('body').css({
    	    'width':config.widthPage,
    	    'height':config.heightPage,
    	    'position':'absolute',
    	    'background-color':config.backgroundShadow,
    	    'top':0,
    	    'left':0
    	}).hide().fadeTo('normal',config.backgroundOpacity);
    	if(config.ajaxPage!=null && config.ajaxPage!='')
    	{
    	    $('<div id="'+config.boxId+'" class="dialogBox"></div>').load('ajax/'+config.ajaxPage,config.ajaxParams,function(){
    		if(config.disabled_close===false){
    		    if(config.idClose==null)config.idClose='close_'+config.boxId;
    		    $(this).prepend('<div id="'+ config.idClose +'">'+config.close_txt+'</div>');
    		}
    		elm.replaceBox();
    	    }).appendTo('body');
     
    	}
    	else
    	{
    	    $('<div id="'+config.boxId+'" class="dialogBox"></div>').appendTo('body').html(config.content).hide();
    	    if(config.disabled_close===false){
    		if(config.idClose==null)config.idClose='close_'+config.boxId;
    		$('#'+config.boxId).prepend('<div id="'+ config.idClose +'">'+config.close_txt+'</div>');
    	    }
    	    elm.replaceBox();
    	}
        }
     
        this.replaceBox=function(){
    	config.widthBox=$('#'+config.boxId).width();
    	config.heightBox=$('#'+config.boxId).height();
     
    	config.left=((config.widthScreen-config.widthBox)/2)+config.widthScroll;
    	config.top=((config.heightScreen-config.heightBox)/2)+config.heightScroll;
     
    	$('#'+config.boxId).css({
    	    'left':config.left,
    	    'top':config.top
    	}).fadeIn();
        }
    tout fonctionne nickel la box se positionne comme il le faut , c'est nickel

    en tout cas merci de votre aide

  11. #11
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonjour

    En fait vous utilisez la même recette , vous créez un dialogue invisible et puis vous appelez la méthode replaceBox() pour ajuster sa position (CSS) et finalement le rendre visible.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

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

Discussions similaires

  1. [AJAX] Chargement scripts contenu dans une div
    Par SrgtPepper dans le forum jQuery
    Réponses: 5
    Dernier message: 27/11/2012, 22h46
  2. Contenu dans une DIV avec scrollbar sous IE7
    Par miltonis dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 23/03/2010, 10h59
  3. [AJAX] Changement de contenu dans une div.
    Par tinoudu01 dans le forum AJAX
    Réponses: 10
    Dernier message: 01/05/2009, 12h22
  4. savoir s'il existe un <a href> dans div, elle meme contenue dans une div
    Par poupouille dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/02/2008, 20h33
  5. [CSS] Décalage de contenu dans une div
    Par Onyx91 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 25/01/2006, 15h27

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