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

Bibliothèques & Frameworks Discussion :

Personnaliser la lightbox (aide JS)


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 20
    Points : 13
    Points
    13
    Par défaut Personnaliser la lightbox (aide JS)
    Bonjour, je veux personnaliser la lightbox alors j'ai commencé a faire quelques modifs sur le script lightbox ainsi que le css, maintenant j'aimerais que l'imageDataContainer ( la zone de texte) n'apparaisse pas en bas de l'image, mais sur la droite toujours avec le même effet d'apparition.

    J'ai trouvé l'effet SlideRightIn qu'il me faut ici http://scriptaculous.jakewendt.com/effects.html#

    J'ai récuperé le javascript qui correspond :

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    /* from SlideDown */
    Effect.SlideRightIn = function(element) {
    /*
    	SlideRightIn needs to have the content of the element wrapped in a container element with fixed width!
    */
    	element = $(element).cleanWhitespace();
    	var elementDimensions = element.getDimensions();
    	return new Effect.Scale(element, 100, 
    		Object.extend({ 
    			scaleContent: false, 
    			scaleY: false, 
    			scaleFrom: window.opera ? 0 : 1,
    			scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    			restoreAfterFinish: true,
    			afterSetup: function(effect) {
    				effect.element.makePositioned();
    				effect.element.down().makePositioned();
    				if(window.opera) effect.element.setStyle({left: ''});
    				effect.element.makeClipping().setStyle({width: '0px'}).show(); 
    			},
    			afterUpdateInternal: function(effect) {
    				effect.element.down().setStyle({right: (effect.dims[1] - effect.element.clientWidth) + 'px' }); 
    			},
    			afterFinishInternal: function(effect) {
    				effect.element.undoClipping().undoPositioned();
    				effect.element.down().undoPositioned();
    			}
    		}, arguments[1] || {})
    	);
    }
     
     
     
     
    Effect.SlideUp = function(element) {
      element = $(element).cleanWhitespace();
      var oldInnerBottom = element.down().getStyle('bottom');
      var elementDimensions = element.getDimensions();
      return new Effect.Scale(element, window.opera ? 0 : 1,
       Object.extend({ scaleContent: false, 
        scaleX: false, 
        scaleMode: 'box',
        scaleFrom: 100,
        scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
        restoreAfterFinish: true,
        afterSetup: function(effect) {
          effect.element.makePositioned();
          effect.element.down().makePositioned();
          if (window.opera) effect.element.setStyle({top: ''});
          effect.element.makeClipping().show();
        },  
        afterUpdateInternal: function(effect) {
          effect.element.down().setStyle({bottom:
            (effect.dims[0] - effect.element.clientHeight) + 'px' });
        },
        afterFinishInternal: function(effect) {
          effect.element.hide().undoClipping().undoPositioned();
          effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
        }
       }, arguments[1] || { })
      );
    };
    Lightbox, est construit a partir de la bibliothèque protoype.js et les effets de scriptaculous

    La ligne correspondant a mon problème se situe ligne 341 dans lightbox.js et 682 dans effects.js

    Je voudrais remplacé le SlideDown par un SlideRightIn, sauf qu'en replaçant le code récuperé, rien ne se passe, si quelqu'un pouvait m'aider

    Merci

  2. #2
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Nous n'avons pas assez d'éléments pour t'aider :
    tu donnes les lignes d'erreurs mais pas les messages. Est-ce que sans changer l'effet ça fonctionne ? Es-tu sur de la fiabilité du composant ? Il est précisé dans le code de ce composant que la largeur doit être fixée. Est-ce le cas ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Je n'est pas dit que c'était des lignes d'erreur et je ne peux pas vous balancer les script effect.js et lightbox.js qui sont bien trop long, en revanche il sont téléchargeable ici http://www.huddletogether.com/projec...box2/#download . Ce sont simplement les lignes auxquels j'ai besoin d'apporter des modifs.

    L'effet d'origine est le SlideDown pour la lightbox. Cet effet est réalisé a partir des effets scriptaculous qui sont contenu dans le fichiers effect.js
    Et pour celui ci la hauteur est déja fixe puisque c'est l'effet d'origine et qu'il fonctionne.

    J'ai récuperé ici http://scriptaculous.jakewendt.com/effects.html le code de l'effet SlideRightIn qui est dans mon 1er message.

    Et je voudrais remplacer, le slideDown par le slideRightIn pour que la zone de texte défile sur la droite de l'image et non en dessous.

    Si besoin d'autres élément ne pas hésité a me le dire

  4. #4
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Citation Envoyé par xerel Voir le message
    L'effet d'origine est le SlideDown pour la lightbox. Cet effet est réalisé a partir des effets scriptaculous qui sont contenu dans le fichiers effect.js
    Et pour celui ci la hauteur est déja fixe puisque c'est l'effet d'origine et qu'il fonctionne.
    Oui mais dans ton premier message, il est indiqué dans le code que la largeur du conteneur de l'élément sur lequel on applique l'effet doit être fixe
    SlideRightIn needs to have the content of the element wrapped in a container element with fixed width!

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Merci de me l'avoir signalé, je ne l'avais même pas vu, mais ça m'avance pas beaucoup, du moins je n'arrive pas à faire quelque chose avec ça...

  6. #6
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Je te déconseille de modifier effects.js de scriptaculous. La définition d'un nouvel effet peut être faite ailleurs après l'inclusion de scriptaculous. Créé donc un js myeffects.js contenant uniquement le code de ton nouvel effet (en attendant que tu étoffes encore cette bibliothèque )

    De même, si tu utilises prototype dans une version >= 1.6, tu peux créer une classe qui hérite de lightbox pour redéfinir la méthode updateDetails:

    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
    var MyLightbox = Class.create(Lightbox, {
          updateDetails: function() {
            // if caption is not null
            if (this.imageArray[this.activeImage][1] != ""){
                this.caption.update(this.imageArray[this.activeImage][1]).show();
            }
            // if image is part of set display 'Image x of x' 
            if (this.imageArray.length > 1){
                this.numberDisplay.update( LightboxOptions.labelImage + ' ' + (this.activeImage + 1) + ' ' + LightboxOptions.labelOf + '  ' + this.imageArray.length).show();
            }
     
            new Effect.Parallel(
                [ 
                    new Effect.SlideRightIn(this.imageDataContainer, { sync: true, duration: this.resizeDuration, from: 0.0, to: 1.0 }), 
                    new Effect.Appear(this.imageDataContainer, { sync: true, duration: this.resizeDuration }) 
                ], 
                { 
                    duration: this.resizeDuration, 
                    afterFinish: (function() {
    	                // update overlay size and update nav
    	                var arrayPageSize = this.getPageSize();
    	                this.overlay.setStyle({ height: arrayPageSize[1] + 'px' });
    	                this.updateNav();
                    }).bind(this)
                } 
            );
        }
    });
    Tout ceci te permettra de faciliter les montées en version des librairies...

    Enfin, montre nous comment tu as changé updateDetails (quelle que soit la méthode de surcharge que tu utilises)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    J'utilise effectivement protoype en version > 1.6

    J'ai fait comme tu m'a dit l'insertion du code dans un nouveau .js
    En faite j'avais juste copié colle le SlideRightIn dans le fichier effect.js
    Au niveau du updateDetails, c'est celui d'origine car je n'ai rien changer au final vu que lorsque je changais new Effect.SlideDown par new Effect.SlideRightIn, je n'avais pas l'effet désiré, en effet la zone de texte restait toujours en bas, juste l'effet d'apparition diffère.
    Je ne sais pas ou apporter les mofifs. Du coup je me retrouve au point mort, j'ai réellement besoin d'aide...

    Maintenant que j'ai mon effet SlideRightIn dans mon fichier myeffect.js, comment le mettre en lien avec le fichier lightbox.js comme l'est le fichier effect.js ??
    Et qu'est ce que m'apporte la creation d'une classe ? je ne peux pas changer directement l'updateDetails ?

  8. #8
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Bon alors après avoir regardé le code de lightbox, je pense que l'utilisation de l'effet SlideRightIn est trop compliquée à mettre en place : le HTML généré par Lightbox ne se prète pas à son utilisation selon moi.

    Voilà ce que j'ai fait:
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
     
    var Lightbox = Class.create(Lightbox, {
          updateDetails: function() {
            // if caption is not null
            if (this.imageArray[this.activeImage][1] != ""){
                this.caption.update(this.imageArray[this.activeImage][1]).show();
            }
            // if image is part of set display 'Image x of x'
            if (this.imageArray.length > 1){
                this.numberDisplay.update( LightboxOptions.labelImage + ' ' + (this.activeImage + 1) + ' ' + LightboxOptions.labelOf + '  ' + this.imageArray.length).show();
            }
    		this.imageDataContainer.setStyle({
    			top: (-this.outerImageContainer.getHeight()) + "px",
    			height: (this.outerImageContainer.getHeight()) + "px",
    			left: this.outerImageContainer.getStyle("left")
    		})
            new Effect.Parallel(
                [
                    new Effect.Move(this.imageDataContainer, { sync: true, duration: this.resizeDuration, mode:"absolute", x: this.imageDataContainer.getWidth(), y:-this.outerImageContainer.getHeight() }),
    				//new Effect.SlideDown(this.imageDataContainer, { sync: true, duration: this.resizeDuration, from: 0.0, to: 1.0 }),
                    new Effect.Appear(this.imageDataContainer, { sync: true, duration: this.resizeDuration })
                ],
                {
                    duration: this.resizeDuration,
                    afterFinish: (function() {
    	                // update overlay size and update nav
    	                var arrayPageSize = this.getPageSize();
    	                this.overlay.setStyle({ height: arrayPageSize[1] + 'px' });
    	                this.updateNav();
                    }).bind(this)
                }
            );
        },
     
        //
        //  resizeImageContainer()
        //
        resizeImageContainer: function(imgWidth, imgHeight) {
     
            // get current width and height
            var widthCurrent  = this.outerImageContainer.getWidth();
            var heightCurrent = this.outerImageContainer.getHeight();
     
            // get new width and height
            var widthNew  = (imgWidth  + LightboxOptions.borderSize * 2);
            var heightNew = (imgHeight + LightboxOptions.borderSize * 2);
     
            // scalars based on change from old to new
            var xScale = (widthNew  / widthCurrent)  * 100;
            var yScale = (heightNew / heightCurrent) * 100;
     
            // calculate size difference between new and old image, and resize if necessary
            var wDiff = widthCurrent - widthNew;
            var hDiff = heightCurrent - heightNew;
     
            if (hDiff != 0) new Effect.Scale(this.outerImageContainer, yScale, {scaleX: false, duration: this.resizeDuration, queue: 'front'});
    //        if (wDiff != 0) new Effect.Scale(this.outerImageContainer, xScale, {scaleY: false, duration: this.resizeDuration, delay: this.resizeDuration});
     
             if (wDiff != 0) {
    			var newMarges = Math.round((document.viewport.getDimensions().width - widthNew - this.imageDataContainer.getWidth())/2);
    			new Effect.Parallel([
    				new Effect.Scale(this.outerImageContainer, xScale, {sync:true, scaleY: false, duration: this.resizeDuration, delay: this.resizeDuration}),
    				new Effect.Morph(this.outerImageContainer, {sync:true,style:"margin-left:" + newMarges + "px;" + "margin-right:" + newMarges + "px"})
    			]);
    		}
            // if new and old image are same size and no scaling transition is necessary,
            // do a quick pause to prevent image flicker.
            var timeout = 0;
            if ((hDiff == 0) && (wDiff == 0)){
                timeout = 100;
                if (Prototype.Browser.IE) timeout = 250;
            }
     
            (function(){
                this.prevLink.setStyle({ height: imgHeight + 'px' });
                this.nextLink.setStyle({ height: imgHeight + 'px' });
                //this.imageDataContainer.setStyle({ width: widthNew + 'px' });
     
                this.showImage();
            }).bind(this).delay(timeout / 1000);
        }
    });
    à ajouter quelque part après l'inclusion Lightbox ;
    et quelques modifs de CSS à ajouter après les css lightbox également
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #outerImageContainer{z-index:2}
    #imageDataContainer { position:relative;width:200px;z-index:1 }
    Ce n'est pas parfait, mais l'idée est là je pense.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Ah, Dreamweaver me dit qu'il y a une erreur de synthaxe au niveau de la 1ère ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var Lightbox = Class.create(Lightbox, {

  10. #10
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Ben je sais pas quoi dire j'utilise pas Dreamweaver.

    Mon code fonctionne, je l'ai testé

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Peut être que c'est au niveau de l'intégration que j'ai foiré alors, tu le place ou exactement dans le fichier lightbox.js ?

  12. #12
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Ne te focalise pas sur Dreamweaver ;
    voici un snapshot de mon code
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    <title></title>
    <script type="text/javascript" src="/lib/prototype.js"></script>
    <script type="text/javascript" src="/lib/script.aculo.us/scriptaculous.js"></script>
    <script type="text/javascript" src="/lib/lightbox.js"></script>
    <link rel="stylesheet" type="text/css" href="/style/lightbox.css"/>
    <script type="text/javascript">
     
    var Lightbox = Class.create(Lightbox, {
    updateDetails: function() {
    // if caption is not null
    if (this.imageArray[this.activeImage][1] != ""){
    this.caption.update(this.imageArray[this.activeImage][1]).show();
    }
    // if image is part of set display 'Image x of x'
    if (this.imageArray.length > 1){
    this.numberDisplay.update( LightboxOptions.labelImage + ' ' + (this.activeImage + 1) + ' ' + LightboxOptions.labelOf + ' ' + this.imageArray.length).show();
    }
    this.imageDataContainer.setStyle({
    top: (-this.outerImageContainer.getHeight()) + "px",
    height: (this.outerImageContainer.getHeight()) + "px",
    left: this.outerImageContainer.getStyle("left")
    })
    new Effect.Parallel(
    [
    new Effect.Move(this.imageDataContainer, { sync: true, duration: this.resizeDuration, mode:"absolute", x: this.imageDataContainer.getWidth(), y:-this.outerImageContainer.getHeight() }),
    //new Effect.SlideDown(this.imageDataContainer, { sync: true, duration: this.resizeDuration, from: 0.0, to: 1.0 }),
    new Effect.Appear(this.imageDataContainer, { sync: true, duration: this.resizeDuration })
    ],
    {
    duration: this.resizeDuration,
    afterFinish: (function() {
    // update overlay size and update nav
    var arrayPageSize = this.getPageSize();
    this.overlay.setStyle({ height: arrayPageSize[1] + 'px' });
    this.updateNav();
    }).bind(this)
    }
    );
    },
    //
    // resizeImageContainer()
    //
    resizeImageContainer: function(imgWidth, imgHeight) {
    // get current width and height
    var widthCurrent = this.outerImageContainer.getWidth();
    var heightCurrent = this.outerImageContainer.getHeight();
    // get new width and height
    var widthNew = (imgWidth + LightboxOptions.borderSize * 2);
    var heightNew = (imgHeight + LightboxOptions.borderSize * 2);
    // scalars based on change from old to new
    var xScale = (widthNew / widthCurrent) * 100;
    var yScale = (heightNew / heightCurrent) * 100;
    // calculate size difference between new and old image, and resize if necessary
    var wDiff = widthCurrent - widthNew;
    var hDiff = heightCurrent - heightNew;
    if (hDiff != 0) new Effect.Scale(this.outerImageContainer, yScale, {scaleX: false, duration: this.resizeDuration, queue: 'front'});
    // if (wDiff != 0) new Effect.Scale(this.outerImageContainer, xScale, {scaleY: false, duration: this.resizeDuration, delay: this.resizeDuration});
    if (wDiff != 0) {
    var newMarges = Math.round((document.viewport.getDimensions().width - widthNew - this.imageDataContainer.getWidth())/2);
    new Effect.Parallel([
    new Effect.Scale(this.outerImageContainer, xScale, {sync:true, scaleY: false, duration: this.resizeDuration, delay: this.resizeDuration}),
    new Effect.Morph(this.outerImageContainer, {sync:true,style:"margin-left:" + newMarges + "px;" + "margin-right:" + newMarges + "px"})
    ]);
    }
    // if new and old image are same size and no scaling transition is necessary,
    // do a quick pause to prevent image flicker.
    var timeout = 0;
    if ((hDiff == 0) && (wDiff == 0)){
    timeout = 100;
    if (Prototype.Browser.IE) timeout = 250;
    }
    (function(){
    this.prevLink.setStyle({ height: imgHeight + 'px' });
    this.nextLink.setStyle({ height: imgHeight + 'px' });
    //this.imageDataContainer.setStyle({ width: widthNew + 'px' });
    this.showImage();
    }).bind(this).delay(timeout / 1000);
    }
    });
    </script>
    </head>

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Merci ! ça reponds presque à mes attentes!!!

    Quelles sont les valeurs a changer pour augmenter la largeur de la zone de texte et diminuer la hauteur (car il est un poil trop grand)?
    Et le seule petit hic, c'est l'apparition de départ qui viens de la droite, j'aimerais que celle ci apparaissent au centre directement.

    Mais je te remercie beaucoup pour l'aide que tu m'a apporté, ça m'avance déjà pas mal !!

    Edit : Je suis nul -.- pour la largeur il suffit simplement de changer le width de l'imagedatacontainer, cependant il séloigne de l'image aussi ^^ donc faut bidouiller ça! par contre pas trouve pour la hauteur, ça doit être dans le Js :/

    2e Edit : En faite j'ai résolu le problème de la hauteur, j'avais des padding qui faussait, donc ça c'est réglé.
    Il me reste encore le problème de l'agrandissement de la largeur de l'imageDataContainer. Lorsque je passe par exemple à 250px, alors je doit rajouté -55 pour que la zone reste collé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Effect.Move(this.imageDataContainer, { sync: true, duration: this.resizeDuration, mode:"absolute", x: this.imageDataContainer.getWidth()-55, y:-this.outerImageContainer.getHeight() }),
    Mais cela change avec la taille images, sauf que dans mon cas ce n'est pas réellement un pb puisque les images auront toutes la même dimension. Le pb que je me pose, c'est par rapport à la résolution d'écran des personnes, cela sera surement différent d'une résolution à une autre.

    Ya t-il un bout de code que l'on puisse rajouté pour que celui ci reste collé sans que celui ci soit un nombre ?

  14. #14
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    la zone est définié en largeur par la css:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #imageDataContainer { position:relative;width:200px;z-index:1 }
    J'avais mis 200px mais tu mets ce que tu veux.

    pour le reste, essaye avec ca
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    var Lightbox = Class.create(Lightbox, {
    	  initialize: function($super) {
    		  $super();
    		  (function() {
     
    			  var initMarges = Math.round((document.viewport.getDimensions().width - parseInt(this.outerImageContainer.getStyle("width").replace(/px/,"")))/2)
    			  this.outerImageContainer.setStyle({
    				  marginLeft: + initMarges + "px",
    				  marginRight: + initMarges + "px"
    			  });
    		  }).bind(this).defer();
    	  },
          updateDetails: function() {
            // if caption is not null
            if (this.imageArray[this.activeImage][1] != ""){
                this.caption.update(this.imageArray[this.activeImage][1]).show();
            }
            // if image is part of set display 'Image x of x'
            if (this.imageArray.length > 1){
                this.numberDisplay.update( LightboxOptions.labelImage + ' ' + (this.activeImage + 1) + ' ' + LightboxOptions.labelOf + '  ' + this.imageArray.length).show();
            }
    		this.imageDataContainer.setStyle({
    			top: (-this.outerImageContainer.getHeight()) + "px",
    			height: (this.outerImageContainer.getHeight()) + "px",
    			left: this.outerImageContainer.getStyle("left")
    		})
     
    		var newMarges = Math.round((document.viewport.getDimensions().width - this.lightboxImage.getWidth() - this.imageDataContainer.getWidth())/2);
            new Effect.Parallel(
                [
                    new Effect.Move(this.imageDataContainer, { sync: true, duration: this.resizeDuration, mode:"absolute", x: this.imageDataContainer.getWidth(), y:-this.outerImageContainer.getHeight() }),
    				//new Effect.SlideDown(this.imageDataContainer, { sync: true, duration: this.resizeDuration, from: 0.0, to: 1.0 }),
                    new Effect.Appear(this.imageDataContainer, { sync: true, duration: this.resizeDuration }),
    				new Effect.Morph(this.outerImageContainer, {sync:true,style:"margin-left:" + newMarges + "px;" + "margin-right:" + newMarges + "px"})
                ],
                {
                    duration: this.resizeDuration,
                    afterFinish: (function() {
    	                // update overlay size and update nav
    	                var arrayPageSize = this.getPageSize();
    	                this.overlay.setStyle({ height: arrayPageSize[1] + 'px' });
    	                this.updateNav();
                    }).bind(this)
                }
            );
        },
     
        //
        //  resizeImageContainer()
        //
        resizeImageContainer: function(imgWidth, imgHeight) {
     
            // get current width and height
            var widthCurrent  = this.outerImageContainer.getWidth();
            var heightCurrent = this.outerImageContainer.getHeight();
     
            // get new width and height
            var widthNew  = (imgWidth  + LightboxOptions.borderSize * 2);
            var heightNew = (imgHeight + LightboxOptions.borderSize * 2);
     
            // scalars based on change from old to new
            var xScale = (widthNew  / widthCurrent)  * 100;
            var yScale = (heightNew / heightCurrent) * 100;
     
            // calculate size difference between new and old image, and resize if necessary
            var wDiff = widthCurrent - widthNew;
            var hDiff = heightCurrent - heightNew;
     
            if (hDiff != 0) new Effect.Scale(this.outerImageContainer, yScale, {scaleX: false, duration: this.resizeDuration, queue: 'front'});
    //        if (wDiff != 0) new Effect.Scale(this.outerImageContainer, xScale, {scaleY: false, duration: this.resizeDuration, delay: this.resizeDuration});
             if (wDiff != 0) {
    			var newMarges = Math.round((document.viewport.getDimensions().width - widthNew/* - this.imageDataContainer.getWidth()*/)/2);
    			new Effect.Parallel([
    				new Effect.Scale(this.outerImageContainer, xScale, {sync:true, scaleY: false, duration: this.resizeDuration, delay: this.resizeDuration}),
    				new Effect.Morph(this.outerImageContainer, {sync:true,style:"margin-left:" + newMarges + "px;" + "margin-right:" + newMarges + "px"})
    			]);
    		}
            // if new and old image are same size and no scaling transition is necessary,
            // do a quick pause to prevent image flicker.
            var timeout = 0;
            if ((hDiff == 0) && (wDiff == 0)){
                timeout = 100;
                if (Prototype.Browser.IE) timeout = 250;
            }
     
            (function(){
                this.prevLink.setStyle({ height: imgHeight + 'px' });
                this.nextLink.setStyle({ height: imgHeight + 'px' });
                //this.imageDataContainer.setStyle({ width: widthNew + 'px' });
     
                this.showImage();
            }).bind(this).delay(timeout / 1000);
        }
    });

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Super ^^ celui ci ne vient plus de la droite mais apparaît directement au centre comme je le voulais. Merci beaucoup!

    Du coup cette fois, la valeur est passé de -55 à -40 ^^, mais ce n'est pas très rigoureux de laissé ça comme ça je pense. On peut surement calculé la distance entre l'imagedatacontainer et l'image? et remplacer le -40 par cette formule ?

  16. #16
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Citation Envoyé par xerel Voir le message
    Du coup cette fois, la valeur est passé de -55 à -40 ^^, mais ce n'est pas très rigoureux de laissé ça comme ça je pense. On peut surement calculé la distance entre l'imagedatacontainer et l'image? et remplacer le -40 par cette formule ?
    Euh... de quoi tu parles ? je n'hardcode rien

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    2e Edit : En faite j'ai résolu le problème de la hauteur, j'avais des padding qui faussait, donc ça c'est réglé.
    Il me reste encore le problème de l'agrandissement de la largeur de l'imageDataContainer. Lorsque je passe par exemple à 250px, alors je doit rajouté -55 pour que la zone reste collé:

    Code :

    new Effect.Move(this.imageDataContainer, { sync: true, duration: this.resizeDuration, mode:"absolute", x: this.imageDataContainer.getWidth()-55, y:-this.outerImageContainer.getHeight() }),

    Mais cela change avec la taille images, sauf que dans mon cas ce n'est pas réellement un pb puisque les images auront toutes la même dimension. Le pb que je me pose, c'est par rapport à la résolution d'écran des personnes, cela sera surement différent d'une résolution à une autre.

    Ya t-il un bout de code que l'on puisse rajouté pour que celui ci reste collé sans que celui ci soit un nombre ?
    Ceci etait un édit de mon précédent message

    Avec le dernier js que tu m'a filé, la valeur est devenu -40px et non -55px. Mais le problème reste le même, ma résolution d'écran est 1600*900, mais avec une résolutions inférieur, il va surement y avoir un nouveau décalage ?
    Ya t-il un petit calcul qui permet de connaitre ce valeur, il n'y aurait plus qu'a le rajouté ici à la place du -40 !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Effect.Move(this.imageDataContainer, { sync: true, duration: this.resizeDuration, mode:"absolute", x: this.imageDataContainer.getWidth()-40, y:-this.outerImageContainer.getHeight() }),

    Edit : Rectification je viens d'essayé avec des résolutions inférieur et ça ne bouge pas du coup ce pb est reglé !! Merciiiii !!!!!!

    J'ai d'autre soucis sur ce site, y connais tu quelques chose avec import flash.external.ExternalInterface; ???

  18. #18
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Bon je ne sais pas d'où tu as sorti ces -55 et -40 ; mais si ça te va tant mieux.

    Essayons de ne pas faire un thread sur ton site mais plus un par sujet.

    Si ton problème initial est résolu, utilise le tag résolu, et démarre un nouveau thread dans le forum approprié (flash/flex à priori)

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Mon -40 et -55 je les est sorti au pif, si tu veux lorsque tu m'a donné ton 1er code, la largeur dans le css était de 200px. Cependant à la visualisation il y avait du vide entre l'image ImangeDataContainer et le bord du conteneur image (environ 10px), il n'était pas collé l'un à l'autre. J'ai fait des tests et plus j'agrandi la largeur plus la distance entre mon l'image et mon Imagedatacontainer est grande.
    J'ai passé la largeur à 250px, et en faisant des test, j'ai remarqué qu'en soustrayant 40px alors les deux parties se recollait. Mais d'ou viens ce pb si toi tu ne l'a pas remarqué ?


    Edit : j'ai crée un nouveau sujet pour mon problème flash qui est directement liée à l'effet lightbox. donc si tu pense pouvoir m'aider http://www.developpez.net/forums/d95...z/#post5362393

Discussions similaires

  1. [Débutant] Personnalisation de l'aide C++ Builder XE2
    Par Mercusyo dans le forum C++Builder
    Réponses: 5
    Dernier message: 27/08/2012, 09h17
  2. Personnaliser lightbox Next et Prev
    Par romanus dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/09/2007, 19h53
  3. [Formulaire]Intégration d'une aide personnalisée
    Par christrabin dans le forum IHM
    Réponses: 6
    Dernier message: 07/09/2007, 18h59
  4. Intégration d'une aide personnalisée
    Par jmde dans le forum Access
    Réponses: 8
    Dernier message: 07/01/2007, 13h24
  5. [vBulletin] Besoin d'aide pour une personnalisation de mon forum
    Par Limerick dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 04/11/2006, 08h29

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