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 :

Recupérer les dimensions


Sujet :

jQuery

  1. #1
    Membre expérimenté Avatar de elfamine
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 113
    Par défaut Recupérer les dimensions
    Bonjour,

    J'essaye d’écrire une fonction qui me permet de récupérer les dimensions d'une balise object (comme dans l'exemple plus bas) et de les attribuer à sa balise parent div

    supposant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <div class="container">
    <object  width="x" height="y"></object>
    </div>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function SetDim(theContainer){
    	var objWidth=$(theContainer).children().width();
    	var objHeight=$(theContainer).children().height();
    	$(theContainer).css( 'width',objWidth ); 
    	$(theContainer).css( 'height',objHeight );
    	}
     
    ...SetDim(".container");
    ca fonctionne sauf que quand j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <div class="container">
    <object  width="x1" height="y1"></object>
    </div>
    <div class="container">
    <object  width="x2" height="y2"></object>
    </div>
    le 1er div prend x1 et y1 comme dimension
    le 2eme div prend aussi x1 et y1 au lieu de x2 y2


    J’espère avoir bien expliqué mon problème et que vous avez une solution ou une approche à me proposer

    edit : ca ne change absolument rien au problème object ou objet

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function SetDim(theContainer){
    	var objWidth=$(theContainer).find('object:eq(0)').width();
    	var objHeight=$(theContainer).find('object:eq(0)').height();
    	$(theContainer).css( {'width':objWidth, 'height':objHeight} );
    	}
    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 expérimenté Avatar de elfamine
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 113
    Par défaut
    Merci d'avoir pris le temps de répondre mais malheureusement ca ne règle toujours pas le problème (oui meme apres avoir vidé le cach :B)

    Peut etre que le problème vient du SetDim(".container"); je l'ai mis dans un $(document).ready(function() {});

    J'ai l'impression que le SetDim ne s’exécute que pour le 1er div et s'applique sur les suivants de la meme facon...

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $(function(){
     
    	$('.container').each( function(){
    			var objHeight=$(this).find('object:eq(0)').attr('height');
    			var objWidth=$('.container').find('object:eq(0)').attr('width');
    			$(this).css({'height':objHeight+'px','width':objWidth+'px', 'border': 'solid 2px red'})
    			})
    })
    A noter que c'est object et non objet ...
    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 expérimenté Avatar de elfamine
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 113
    Par défaut
    Je pense qu'avec un exemple ca va etre plus clair (voir pièce jointe)

    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
    <div class="mainframe">
    	<div id="frame1">
    		<div class="container">
    			<p class="obj">200x200</p>
    		</div>
    	</div>
    </div>
    	<br>
    <div class="mainframe">
     
    	<div id="frame2">
    		<div class="container">
    			<p class="obj">100x100</p>
    		</div>
    	</div>
    </div>
    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
    function SetDim(theContainer){
    	var objWidth=$(theContainer).children().width();
    	var objHeight=$(theContainer).children().height();
    	$(theContainer).css( 'width',objWidth ); 
    	$(theContainer).css( 'height',objHeight );
    	}
    function CenterItem(theItem){
        var winWidth=$('.mainframe').width();
        var winHeight=$('.mainframe').height();
        var windowCenter=winWidth/2;
        var itemCenter=$(theItem).width()/2;
        var theCenter=windowCenter-itemCenter;
        var windowMiddle=winHeight/2;
        var itemMiddle=$(theItem).height()/2;
        var theMiddle=windowMiddle-itemMiddle;
        if(winWidth>$(theItem).width()){ //horizontal
            $(theItem).css('left',theCenter);
        } else {
            $(theItem).css('left','0');
        }
        if(winHeight>$(theItem).height()){ //vertical
            $(theItem).css('top',theMiddle);
        } else {
            $(theItem).css('top','0');
        }
    }
    $(document).ready(function() {
    	SetDim('.container');
        CenterItem('.container');
    });
    $(window).resize(function() {
    	SetDim('.container');
        CenterItem('.container');
    });


    Ca bloque au niveau du 2eme élément celui en 100x100 son div prend toujours les dimension 200x200
    Fichiers attachés Fichiers attachés

  6. #6
    Membre expérimenté Avatar de elfamine
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 113
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $(document).ready(function() {
    	SetDim('#frame1 .container');
    	SetDim('#frame2 .container');
        CenterItem('#frame1 .container');
        CenterItem('#frame2 .container');
    });
    par contre ceci semble résoudre le problème...mais bon je me demande s'il y a pas de solution plus clean...

  7. #7
    Membre expérimenté Avatar de eckerdecker
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 134
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $(function(){
    	$('.container').each( function(){
    		var objHeight=$(this).find('object:eq(0)').attr('height');
    		var objWidth=$('.container').find('object:eq(0)').attr('width');
    		$(this).css({'height':objHeight+'px','width':objWidth+'px', 'border': 'solid 2px red'});
    	});
    });
    Ce que te montre SpaceFrog avec ce code c'est que tu dois adresser chacun de tes .container individuellement si tu veux qu'ils aient chacun leur propre comportement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $(document).ready(function() {
    	SetDim('#frame1 .container');
    	SetDim('#frame2 .container');
        CenterItem('#frame1 .container');
        CenterItem('#frame2 .container');
    });
    C'est d'ailleurs ce que tu fais ici mais sans l'optimisation.

    Explications :
    Si on regarde la documentation de .width() ou .height() on peut lire : "Get the current computed width (height) for the first element in the set of matched elements."

    Quand tu appelles ta fonction SetDim en lui passant en paramètre ".container" que se passes-t-il ?
    - $('.container') te retourne un tableau de tous les éléments de class container
    - .children() te retourne tous les fils de tous tes éléments de class container
    - .width() et .height() te retournent la largeur et la hauteur du premier de tous ces éléments

    Et ensuite tu appliques ces deux valeurs à tous tes éléments de class container => ton problème en somme !


    Solution :
    Première étape, comme te l'a suggéré SpaceFrog : utilises .find('object:first') ou .find('object:eq(0)') au lieu de .children(), au cas ou ton html devait évoluer tu seras certain de cibler exactement ce que tu veux.
    Deuxième étape adapter le code suggéré par SpaceFrog à ta méthode, en somme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function SetDim(theContainer){
    	$(theContainer).each(function(){
    		var objWidth=$(this).find('object:first').width();
    		var objHeight=$(this).find('object:first').height();
    		$(this).css( 'width',objWidth ); 
    		$(this).css( 'height',objHeight );
    	});
    }
    Et puisque j'ai déjà tant blablaté, la version "optimisée"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function SetDim(theContainer){
    	$(theContainer).each(function(){
    		var obj = $(this).find('object:first');
    		$(this).css({'width':obj.width(), 'height':obj.height()});
    	});
    }
    Note : je pense que tu as le même souci sur ta fonction CenterItem()

  8. #8
    Membre expérimenté Avatar de elfamine
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 113
    Par défaut
    Merci pour les explications. Ca semble logique sauf que ne marche pas de mon coté. Pour l'instant je pense laissé le code non optimisé puisqu'il marche et lire la docu à tete reposé quand j'aurais plus de temps. Je marque le sujet comme réglé en vous remerciant encore une fois pour vos réponses.

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

Discussions similaires

  1. Recupérer les dimensions de la fenêtre du navigateur
    Par Mageni dans le forum GWT et Vaadin
    Réponses: 5
    Dernier message: 09/01/2014, 17h53
  2. Recupérer les dimensions d'un Jpeg
    Par Gruik dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 25/10/2005, 16h26
  3. Récupérer les dimensions de mon image.
    Par Trilby dans le forum ASP
    Réponses: 3
    Dernier message: 10/02/2005, 09h52

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