11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

Je suis nouvelle sur le forum alors j'espère que je serais assez précise Smiley smile
Sur mon site j'ai intégré un slide qui contient deux pages de vignettes cliquables. Lorsque je survole une vignette, celle-ci reste en couleur tandis que toutes les autres se mettent en flou ainsi qu'en noir et blanc. Cela fonctionne parfaitement sur la première page du slide mais pas la deuxième. J'ai beau tester plusieurs manip, rien ne fonctionne. Sûrement parce que je bidouille Smiley confused

Je ne connais pas très bien les scripts et je pense que le problème vient de là mais je n'en suis pas certaine... Quelqu'un aurait-il une idée ? Merci beaucoup d'avance pour votre aide !


Le code :

<head>
<!------------slider_realisation--------------------->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
			$(function() {
				
				var $container	= $('#ib-container'),
					$articles	= $container.children('article'),
					timeout;
				
				$articles.on( 'mouseenter', function( event ) {
						
					var $article	= $(this);
					clearTimeout( timeout );
					timeout = setTimeout( function() {
						
						if( $article.hasClass('active') ) return false;
						
						$articles.not( $article.removeClass('blur').addClass('active') )
								 .removeClass('active')
								 .addClass('blur');
						
					}, 65 );
					
				});
				
				$container.on( 'mouseleave', function( event ) {
					
					clearTimeout( timeout );
					$articles.removeClass('active blur');
					
				});
			
			});
		</script>
<!--------------------------------->
<script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
<script src="http://bxslider.com/sites/default/files/jquery.bxSlider.min.js" type="text/javascript"></script>
<script type="text/javascript">
  $(document).ready(function(){
    $('#slider1').bxSlider();
  });
</script>
<!--------------------------------->
</head>

<body>

    <div id="containerrealisation_droite">
      <ul id="slider1">
        <li>
          <section class="ib-container" id="ib-container">
            <article><a href="acta.html" target="_self" class="vignette" ><img src="img/portfolio_acta.png"/></a></article>
            <article><a href="motorataf.html" target="_self" class="vignette"><img src="img/portfolio_motorataf.png"/></a></article>
            <article><a href="cocodileetpopotame.html" target="_self" class="vignette"><img src="img/portfolio_cp.png"/></a></article>
            <article><a href="mrmondialisation.html" target="_self" class="vignette"><img src="img/portfolio_mrmondialisation.png"/></a></article>
            <article><a href="augeo.html" target="_self" class="vignette"><img src="img/portfolio_augeo.png"/></a></article>
            <article><a href="zerogravity.html" target="_self" class="vignette"><img src="img/portfolio_zerogravity.png"/></a></article>
          </section>
        </li>
        <li>
          <section class="ib-container" id="ib-container">
            <article><a href="biganos.html" target="_self" class="vignette" ><img src="img/portfolio_biganos.png"/></a></article>
            <article><a href="cryobois.html" target="_self" class="vignette" ><img src="img/portfolio_cryobois.png"/></a></article>
            <article><a href="larsen.html" target="_self" class="vignette" ><img src="img/portfolio_larsen.png"/></a></article>
          </section>
        </li>
      </ul>
    </div>
  </div>
</div>

</body>
</html>


Et le css :


#containerrealisation_droite {
	height: 515px;
	float: right;
	box-shadow: 1px 1px 5px 2px rgba(0,0,0,0.08);
	-moz-box-shadow: 1px 1px 5px 2px rgba(0,0,0,0.08);
	-o-box-shadow: 1px 1px 5px 2px rgba(0,0,0,0.08);
	-ms-box-shadow: 1px 1px 5px 2px rgba(0,0,0,0.08);
	-webkit-box-shadow: 1px 1px 5px 2px rgba(0,0,0,0.08);
	width: 750px;
	border: 7px solid rgba(255,255,255,0.6);
	background-image: url(img/backgroundportfolio.png);

}
.vignette  {
	float: left;
	height: 181px;
	width: 181px;
	margin: 15px;
	border: thin dashed #CCC;
	box-shadow: 1px 1px 5px 2px rgba(0,0,0,0.04);
	-moz-box-shadow: 1px 1px 5px 2px rgba(0,0,0,0.04);
	-o-box-shadow: 1px 1px 5px 2px rgba(0,0,0,0.04);
	-ms-box-shadow: 1px 1px 5px 2px rgba(0,0,0,0.04);
	-webkit-box-shadow: 1px 1px 5px 2px rgba(0,0,0,0.04);
}

	
.ib-container article{
	z-index: 1;
	-webkit-backface-visibility: hidden;
	margin-top: 36px;
	margin-left: 52px;
	
	transition: all 0.3s linear;
	-moz-transition: all 0.3s linear;
	-o-transition: all 0.3s linear;
	-ms-transition: all 0.3s linear;
	-webkit-transition: all 0.3s linear;

}
.ib-container article.blur {
	opacity: 0.4;
	-moz-opacity : 0.4;
	filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale"); /* Firefox 3.5+ */
    filter: gray; /* IE6-9 */
    -webkit-filter: grayscale(1); /* Google Chrome & Safari 6+ */
}

Modifié par monagence (23 Sep 2012 - 21:19)
Merci pour la réponse Smiley smile
C'est pour le javascript ? Je ne connais pas vraiment...J'essaie de comprendre les petits scripts seulement. Donc là ce n'est pas moi qui l'ai créé, j'ai pris deux tutos sur le net (un pour le slide et un pour les effets) que j'ai combiné....

la page en question

merci !

note : Mon code est brouillon visuellement...
Modifié par monagence (23 Sep 2012 - 23:30)
Bon, après avoir regardé ton code en action, je suis pas mal convaincu que ton problème vient de ce que je t'ai pointé plus haut. Tu devrais donc lire la documentation.

Le problème est que ton slider génère des éléments DOMs. Lorsque tu appelle simplement `.on()`, tu écoute pour des évènements sur les éléments du DOM actuellement existant. De ce fait, l'évènement n'est pas ajoutés aux éléments créés par la suite. Pour cela, tu dois utiliser la fonctionner `.delegate()` (ou `.on()` avec une syntaxe légèrement différente):

http://api.jquery.com/delegate/
http://api.jquery.com/on/
Non c'est pas ça le problème, il vient du fait que tu te retrouve avec plusieurs fois le même id dans la même page : "ib-container".

du coup, qd tu sélectionne "ib-container" en javascript, bah il te retourne que le 1er qu'il trouve car un id est sensé être unique.

Si tu remplaces dans ton javascript
var $container	= $('#ib-container'),
par
var $container	= $('#slider1'),

est-ce que ça marche mieux ? Et vire moi ces id="ib-container" en double Smiley cligne
Bonjour Smiley smile

Vaxilart, j'ai lu les liens, je vois bien que c'est différent mais je n'ai pas assez de connaissance pour effectuer le changement, cela me parait complexe...

MrJO, je crois aussi que cela vient de mes id mais je ne peux pas l'affirmer... En fait, j'avais "simplement" dupliqué le contenu du slide pour en faire une deuxième page, ce qui n'était peut-être pas si logique Smiley confused
Si j'effectue la modification comme tu l'expliques, le hover ne s'applique sur aucune vignette.
Quant aux id en double, ils sont utilisés dans le script alors comment faire ?
Je crois qu'il me faudrait une variable de plus correspondant à l'id en double (qui serait modifié), non ?

Ce n'est pas possible de créer quelque chose du genre :

var $container	= $('#ib-container1'), $('#ib-container2')
?

Merci à tous les deux.
Modifié par monagence (24 Sep 2012 - 19:34)
non je ne pense pas que ce soit possible avec jquery.

Je pense que le "container" que je t'ai donné est bon :

var $container	= $('#slider1'),


mais du coup ça change la selection pour les articles c'est pour ça que ça ne marche pas.

il faut que tu arrives a mieux selectionner tes article en js

essaye de remplacer :

$articles	= $container.children('article'),


par

$articles	= $('#slider1 article'),
Oh merveilleux cela fonctionne !!!

Juste pour préciser, que ce soit avec slider1 ou ib-container pour var $container, ça ne change rien. La différence était juste dans la variable articles.

C'est super merci merci Smiley smile
Modifié par monagence (24 Sep 2012 - 21:38)
Oui, ça ne change rien pour le "mouseover", mais pas pour le "mouseleave". Garde bien le
var $container	= $('#slider1'),
et ça devrait bien marcher.
Modifié par MrJO (24 Sep 2012 - 21:53)