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 :

une instance de fonction via Jquery


Sujet :

jQuery

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut une instance de fonction via Jquery
    Bonjour,

    Durant le développement d'un site e-commerce, j'ai été confronté à un léger soucis avec JQuery et plus particulièrement le plugin JQzoom.

    En effet, j'aimerai changer le visuel d'un produit au changement de taille par l'utilisateur (exemple : vêtement enfant porté par un enfant / vêtement adulte porté par un adulte).

    Néanmoins, la seule parade que j'ai trouvé pour JQzoom est de générer une nouvelle instance via ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <script type="text/javascript">
    $(document).ready(function(){
      var options = {
        preloadText: 'Chargement...'
      };
     
      $('.ma_classe').jqzoom(options);
    });
    </script>
    Problème : on créée une instance de JQzoom à chaque fois que l'on change la taille du vêtement.

    Question :
    peut-on décharger une instance d'un plugin / d'une fonction dans jquery ? Si oui, pourriez-vous, svp, me dire comment ?

    En vous remerciant d'avance.
    Bertrand

  2. #2
    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 : 74
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonsoir.

    Je viens de tester ce plugin que je ne connaissais pas encore.

    Peu importe le nombre d'images, il n'y a jamais qu'un objet jqzoom.

    Voici le code de mon test :
    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
     
    <!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">
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    	<meta name="Author" content="Daniel Hagnoul" />
    	<title>Page type</title>
    	<link rel="stylesheet" type="text/css" href="../lib/jqzoom.css" media="screen" />
    	<style type="text/css">
    		body {
    			background-color:#696969;
    			color:#000000;
    			font-family:Arial, Helvetica, sans-serif;
    			font-size:medium;
    			font-style:normal;
    			font-weight:normal;
    			line-height:normal;
    			letter-spacing:normal;
    		}
    		h1,h2,h3,h4,h5 {
    			font-family:"Times New Roman", Times, serif;
    		}
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img {
    			margin:0px;
    			padding:0px;
    		}
    		p {
    			padding:6px;
    		}
    		ul,ol,dl {
    			list-style:none;
    			padding-left:6px;
    			padding-top:6px;
    		}
    		li {
    			padding-bottom:6px;
    		}
    		div#conteneur {
    			width:95%;
    			margin:12px auto;
    			padding:6px;
    			background-color:#FFFFFF;
    			color:#000000;
    			border:1px solid red;
    			font-size:0.8em;
    		}
    		.ma_classe {
    			float:left;
    			margin:12px;
    		}
    	</style>
    	<!-- <script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.js"></script> -->
    	<script type="text/javascript" src="../lib/jquery-1.3.2.min.js"></script>
    	<script type='text/javascript' src='../lib/jqzoom.pack.1.0.1.js'></script>
    	<script type="text/javascript">
    		$(document).ready(function(){
    			var options = {
    				zoomWidth: 100,
    				zoomHeight: 100,
    				xOffset: 10,
    				yOffset: 0,
    				preloadText: 'Chargement...'
    			};
     
    			$('.ma_classe').jqzoom(options);
      		});
    	</script>
    </head>
    <body>
    	<div id="conteneur">
    		<a href="../Lightbox/photos/image1.jpg" class="ma_classe"  title="Image 1">
    			<img src="../Lightbox/photos/thumb_image1.jpg" width="72" height="72" title="Un beau titre n° 1" />
    		</a>
    		<a href="../Lightbox/photos/image2.jpg" class="ma_classe"  title="Image 2">
    			<img src="../Lightbox/photos/thumb_image2.jpg" width="72" height="72" title="Un beau titre n° 2" />
    		</a>
    		<a href="../Lightbox/photos/image3.jpg" class="ma_classe"  title="Image 3">
    			<img src="../Lightbox/photos/thumb_image3.jpg" width="72" height="72" title="Un beau titre n° 3" />
    		</a>
    		<a href="../Lightbox/photos/image4.jpg" class="ma_classe"  title="Image 4">
    			<img src="../Lightbox/photos/thumb_image4.jpg" width="72" height="72" title="Un beau titre n° 4" />
    		</a>
    		<a href="../Lightbox/photos/image5.jpg" class="ma_classe"  title="Image 5">
    			<img src="../Lightbox/photos/thumb_image5.jpg" width="72" height="72" title="Un beau titre n° 5" />
    		</a>
    		<div style="clear:both">
    			<p>
    				zoomType = 'standard';<br />
    			The other admitted option value is 'reverse',this is characterized by image opacity.
    			</p>
    			<p>
    				zoomWidth = 200;<br />
    			The popup window width showing the zoomed area.
    			</p>
    			<p>
    				zoomHeight = 200;<br />
    			The popup window height showing the zoomed area.
    			</p>
    			<p>
    				xOffset = 10;<br />
    			The popup window x offset from the small image.(always positive value if the 'position' option is 'right/left', positive/negative if the 'position' option is 'top/bottom'.
    			</p>
    			<p>
    				yOffset = 0;<br />
    			The popup window y offset from the small image.(positive/negative value if the 'position' option is 'right/left', always positive if the 'position' option is 'top/bottom'.
    			</p>
    			<p>
    				position = 'right';<br />
    			The popup window position.Admitted values:'right' ,'left' ,'top' ,'bottom'lenstrueif setted to false,the small lens,over the image, won't show.
    			</p>
    			<p>
    				imageOpacity = 0.2;<br />
    			Set the image opacity when the 'zoomType' option is setted to 'reverse'.
    			</p>
    			<p>
    				title = true;<br />
    			Show a small title over the image it can be the anchor title and if not specified,it will get the small image title.
    			</p>
    			<p>
    				showEffect = 'show';<br />
    			The Effect by which showing the popup window.Options available: 'show' ,'fadein'.
    			</p>
    			<p>
    				hideEffect = 'hide';<br />
    			The Effect by which hiding the popup window.Options available: 'hide' ,'fadeout'.
    			</p>
    			<p>
    				fadeinSpeed = 'fast';<br />
    			Changes fade in speed,in case the showEffect option is setted to 'fadein'.(options: 'fast','slow','medium')
    			</p>
    			<p>
    				fadeoutSpeed = 'slow';<br />
    			Changes fade out speed,in case the hideEffect option is setted to 'fadeout'.(options: 'fast','slow','medium')
    			</p>
    			<p>
    				showPreload = true;<br />
    			Show the preload loading indicator.(options: 'true','false')
    			</p>
    			<p>
    				preloadText = 'Loading zoom';<br />
    			Option to customize the preload indicator text.
    			</p>
    			<p>
    				preloadPosition = 'center';<br />
    			By default the preload indicator is centered over the small image.
    			</p>
    			<p>
    				You can optionally use the 'bycss' option letting you to change its position by css.
    			</p>
    		</div>
    	</div>
    </body>
    </html>

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Tout d'abord merci pour ta réponse mais le problème est un peu différent de ce que tu as montré.


    Imagines que tu n'ai qu'une seule image sur ta page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      <a href="../Lightbox/photos/image1.jpg" class="ma_classe"  title="Image 1">
        <img src="../Lightbox/photos/thumb_image1.jpg" width="72" height="72" title="Un beau titre n° 1" />
        </a>

    Et que tu ai un "select" avec admettons "S" / "M" / "L" / "XL" / "XXL".
    Le but est de changer le visuel lorsque l'on clique sur une des tailles (à condition qu'il existe une image spécifique pour cette taille sinon on laisse l'originale).


    Pour cela, on va dire qu'il y a un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      <select onchange="changeProductImage(id_taille_selectionnee, image);">
        <option value="0">S</option>
        <option value="1">M</option>
        <option value="2">L</option>
        <option value="3">XL</option>
        <option value="4">XXL</option>
      </select>
    Et que la fonction changeProductImage est comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      function changeProductImage(id, image)
      { 
        document.getElementById(id).src = image;
      }
    Problème : Cela change le visuel mais pas l'image du zoom.

    J'ai donc écrit une autre fonction qui elle change le contenu du lien et recharge le JQzoom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      function changeProductLink(id, image)
      { 
        document.getElementById(id).href = image;
     
        $(document).ready(function(){
          var options = {
            preloadText: 'Chargement...'
          };
     
          $('.ma_classe').jqzoom(options);
        } );
     
      }

    Dans ce cas de figure (pas très propre je te l'accorde) à deux images cela fonctionne à peu prêt (des fois on a le zoom de l'ancienne image) mais à trois et plus ça rame sévère car, selon moi, il créé bien autant d'instance que de changement de taille.

    Dis le moi si je suis pas clair surtout ? Moi ce que je veux c'est décharger l'objet précédent (tous les JQzoom en faites) avant de lancer mes fonctions.

    Bertrand

  4. #4
    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 : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

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

    Je pense que tu devrais essayer de créer une page avec toutes les images
    présentes, "S" / "M" / "L" / "XL" / "XXL" dans des divs

    Tester que ton zoom fonctionne bien ainsi.

    Puis tu mets tous les div en display: none sauf le premier. et lors
    du changement de la liste, tu passe en display: block le div qui doit
    apparaitre et en display: none les autres.

    Ainsi tu n'aura qu'une instance de jqzoom

    Regarde le code source du plugin, mais je pense que le problème vient
    du fait qu'il assigne un eventListener au mousemove du body, ainsi chaque
    nouvelle instance chaine un listener de plus et le traitement devient d'autant
    plus long qu'il y a d'instance, hypothèse à vérifier.

  5. #5
    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 : 74
    Localisation : Belgique

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

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

    Concernant votre première intervention, je n'avais pas bien compris le problème. Dans cet exemple, je modifie l'URL de l'image en fonction du choix de l'utilisateur.

    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     
    <!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">
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    	<meta name="Author" content="Daniel Hagnoul" />
    	<title>Page type</title>
    	<link rel="stylesheet" type="text/css" href="../lib/jqzoom.css" media="screen" />
    	<style type="text/css">
    		body {
    			background-color:#696969;
    			color:#000000;
    			font-family:Arial, Helvetica, sans-serif;
    			font-size:medium;
    			font-style:normal;
    			font-weight:normal;
    			line-height:normal;
    			letter-spacing:normal;
    		}
    		h1,h2,h3,h4,h5 {
    			font-family:"Times New Roman", Times, serif;
    		}
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img {
    			margin:0px;
    			padding:0px;
    		}
    		p {
    			padding:6px;
    		}
    		ul,ol,dl {
    			list-style:none;
    			padding-left:6px;
    			padding-top:6px;
    		}
    		li {
    			padding-bottom:6px;
    		}
    		div#conteneur {
    			width:95%;
    			margin:12px auto;
    			padding:6px;
    			background-color:#FFFFFF;
    			color:#000000;
    			border:1px solid red;
    			font-size:0.8em;
    		}
    		.ma_classe {
    			float:left;
    			margin:12px;
    		}
    	</style>
    	<!-- <script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.js"></script> -->
    	<script type="text/javascript" src="../lib/jquery-1.3.2.min.js"></script>
    	<script type='text/javascript' src='../lib/jqzoom.pack.1.0.1.js'></script>
    	<script type="text/javascript">
    		$(document).ready(function(){
    			var options = {
    				zoomWidth: 100,
    				zoomHeight: 100,
    				xOffset: 10,
    				yOffset: 0,
    				preloadText: 'Chargement...'
    			};
     
    			$('.ma_classe').jqzoom(options);
     
    			var url = "../Lightbox/photos/";
    			var type = ".jpg";
     
    			$("select[name='choix']").change(function(){
    				var image = $(this).val();
     
    				$("#monLien").attr("href", url + image + type);
    				$("#monLien img").attr("src", url + "thumb_" + image + type);
    			});
      		});
    	</script>
    </head>
    <body>
    	<div id="conteneur">
    		<a id="monLien" href="../Lightbox/photos/image1.jpg" class="ma_classe"  title="Image 1">
    			<img src="../Lightbox/photos/thumb_image1.jpg" width="72" height="72" title="Un beau titre n° 1" />
    		</a>
    		<!--
    		<a href="../Lightbox/photos/image2.jpg" class="ma_classe"  title="Image 2">
    			<img src="../Lightbox/photos/thumb_image2.jpg" width="72" height="72" title="Un beau titre n° 2" />
    		</a>
    		<a href="../Lightbox/photos/image3.jpg" class="ma_classe"  title="Image 3">
    			<img src="../Lightbox/photos/thumb_image3.jpg" width="72" height="72" title="Un beau titre n° 3" />
    		</a>
    		<a href="../Lightbox/photos/image4.jpg" class="ma_classe"  title="Image 4">
    			<img src="../Lightbox/photos/thumb_image4.jpg" width="72" height="72" title="Un beau titre n° 4" />
    		</a>
    		<a href="../Lightbox/photos/image5.jpg" class="ma_classe"  title="Image 5">
    			<img src="../Lightbox/photos/thumb_image5.jpg" width="72" height="72" title="Un beau titre n° 5" />
    		</a>
    		-->
    		<div style="clear:both">
    			<form>
    				<select name="choix">
    					<option value="image1" selected="selected">1</option>
    					<option value="image2">2</option>
    					<option value="image3">3</option>
    					<option value="image4">4</option>
    					<option value="image5">5</option>
    				</select>
    			</form>
    		</div>
    	</div>
    </body>
    </html>
    Dans cet exemple toutes les images ont la même taille, sinon il faut également modifiés les attributs width et height de <image>

    Je viens de voir que j'aurais dû également modifié l'attribut title de <a> et celui de <image>

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/04/2009, 08h44
  2. [DOM] appeler une fonction via son nom (qui est une string)
    Par elekis dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/07/2008, 13h06
  3. Comment créer une liste ou une instance de classe dans une fonction ?
    Par Neolander dans le forum Général Python
    Réponses: 9
    Dernier message: 05/03/2008, 19h22
  4. Exécuter une fonction via les Macro
    Par Kephuro dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/01/2008, 23h31
  5. Réponses: 11
    Dernier message: 31/10/2005, 17h59

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