<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>VirtuousWeb</title>
	<atom:link href="http://web.virtuousquare.fr/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://web.virtuousquare.fr</link>
	<description>Pour les affamés de web-design !</description>
	<lastBuildDate>Wed, 26 May 2010 16:55:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>De retour prochainement</title>
		<link>http://web.virtuousquare.fr/?p=369</link>
		<comments>http://web.virtuousquare.fr/?p=369#comments</comments>
		<pubDate>Wed, 26 May 2010 16:55:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://web.virtuousquare.fr/?p=369</guid>
		<description><![CDATA[
Grande période de refonte sur virtuousquare qui va s&#8217;accompagner probablement d&#8217;une interconnexion des sites. Donc pour le moment pas de nouveaux articles, je me concentre sur le redesign. Ces refontes seront assurément l&#8217;occasion d&#8217;écrire des nouveaux scripts.
]]></description>
			<content:encoded><![CDATA[<p><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/05/coming.jpg" alt="" title="coming" width="709" height="205" /></p>
<p>Grande période de refonte sur virtuousquare qui va s&#8217;accompagner probablement d&#8217;une interconnexion des sites. Donc pour le moment pas de nouveaux articles, je me concentre sur le redesign. Ces refontes seront assurément l&#8217;occasion d&#8217;écrire des nouveaux scripts.</p>
]]></content:encoded>
			<wfw:commentRss>http://web.virtuousquare.fr/?feed=rss2&amp;p=369</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Une galerie défilante en perspective grâce à jQuery</title>
		<link>http://web.virtuousquare.fr/?p=356</link>
		<comments>http://web.virtuousquare.fr/?p=356#comments</comments>
		<pubDate>Mon, 17 May 2010 20:36:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://web.virtuousquare.fr/?p=356</guid>
		<description><![CDATA[
Toujours à la recherche de nouveaux effets à réaliser en javascript, je suis tombé sur un carrousel plutôt sympa en accueil du site de TF1 réalisé en flash, et je me suis mis en tête de le refaire avec jQuery.

Pour cette première version que je présente, j&#8217;ai juste réussi à reproduire la boucle du carrousel, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/05/visu.jpg" alt="" title="visu" width="709" height="170" /></p>
<p>Toujours à la recherche de nouveaux effets à réaliser en javascript, je suis tombé sur un carrousel plutôt sympa en accueil du site de <a href="http://www.tf1.fr/" target="_blank">TF1</a> réalisé en flash, et je me suis mis en tête de le refaire avec jQuery.</p>
<div class="hide_content">
<p>Pour cette première version que je présente, j&#8217;ai juste réussi à reproduire la boucle du carrousel, mais il n&#8217;est pas encore possible d&#8217;effectuer un défilement. Voyons déjà comment ça marche.</p>
<p>Vous pouvez déjà jeter un oeil au résultat<br /><a style="font-size:20px; background:#0066cc; padding:5px 10px; color:#fff; margin-top:5px; float:left;" href="http://web.virtuousquare.fr/wp-content/themes/default/tuto/perspective/perspective2.htm" target="_blank">La démo</a></p>
<p style="clear:both; margin-top:10px;">Comme je disais il s&#8217;agit là d&#8217;une première version qui sera perfectionnée pour faire défiler les diapos en cliquant dessus, mais il s&#8217;avère que c&#8217;est plus dur qu&#8217;il n&#8217;y paraît (pour moi en tout cas ^^).<br /> Voici quand même la base qui devrait être la bonne. Déjà le HTML puis le CSS, comme d&#8217;habitude, le plus simple possible.</p>
<pre class="brush: xml;">
<div class="boxes">
<div class="box">
<img src="images/img1.jpg" />
<h2>Nausicaa</h2>
</div>
<div class="box">
<img src="images/img2.jpg" />
<h2>Mon voisin Totoro</h2>
</div>
<div class="box">
<img src="images/img3.jpg" />
<h2>Ponyo sur la falaise</h2>
</div>
<div class="box">
<img src="images/img4.jpg" />
<h2>Princesse Mononoke</h2>
</div>
<div class="box">
<img src="images/img5.jpg" />
<h2>Le voyage de Chihiro</h2>
</div>
</div>
</pre>
<pre class="brush: css;">
.boxes {
	width:900px;
	height:300px;
	position:relative;
}
.box {
	width:700px;
	height:300px;
	position:absolute;
}
.box img {
	position:absolute;
	top:0;
	left:0;
}
.box h2 {
	position:absolute;
	right:10px;
	top:10px;
	font-size:40px;
	color:#fff;
	text-shadow: #111 4px 4px 4px;
}
</pre>
<p>Voici pour la forme brute, et jetons un oeil à ce qui va animer tout ça. Pour le moment il n&#8217;est pas pluginisé (quel mot savant!), mais je le ferai d&#8217;abord évoluer avant de le faire. Il a aussi un lifting à subir avant, et de pouvoir s&#8217;adapter à la structure dans laquelle il se trouve, mon exemple est loin d&#8217;être assez générique.</p>
<pre class="brush: javascript;">
$(document).ready(function(){
	var hauteur = $(".box").height();
	var largeur = $(".box").width();
	var chiffre = ($(".box").length) - 1;
	var etat = "auto";

	$(".box h2").hide();
	$(".box:last h2").show();

	for (i = 0; i < 5; i++) {
		$(".box:eq("+ i +")").css({
			left : i*50,
			height : hauteur+(chiffre - i)*-30,
			top : (chiffre - i)*15
		});
		$(".box:eq("+ i +") img").css({
			height : hauteur+(chiffre - i)*-30
		});
	}

	jQuery.fn.pers = function(){
		$(this).animate({left : '+=50', height : '+=30', top : '-=15'},800);
		$("img", this).animate({height : '+=30'},800);
		$(".box:last").prev(".box").find("h2").delay(600).fadeIn(200);
	}
	jQuery.fn.persRet = function(){
		$(this).animate({left : 300, opacity : 0},400,function(){
			$("img", this).css({height : hauteur+(i-1)*-30});
			$("h2", this).hide();
			$(this)
				.prependTo(".boxes")
				.css({left : 200, top : (i-1)*15, height : hauteur+(i-1)*-30})
				.animate({left : 0, opacity : 1},400, function(){
					etat = "auto";
				});
			});
	}

	jQuery.fn.persRota = function(){
		etat = "autoMov";
		$(this).each(function(){
			if ($(this).index() == chiffre) {
				$(this).persRet();
			}
			else {
				$(this).pers();
			}
		});
	}
	var rota =
		setInterval ( function(rota){
			$(".box").persRota();
		}
		,4000);
});
</pre>
<p>A vrai dire je sèche un peu pour le faire évoluer et le rendre cliquable, voici le script que j'ai ajouté pour le moment et qui fonctionne presque, mais le comportement n'est pas le bon quand on clique plus que le 2ème dans la liste ou si on clique trop de fois...</p>
<pre class="brush: javascript;">
	$(".box").click(function(){
		if (etat == "auto") {
			clearInterval(rota);
			clearTimeout(oneRota);
			etat = "manual";
			var index = $(this).index();
			var compt = 1;
			while (compt <= (chiffre - index)) {
				compt++;
				$(".box").persRota();
				var oneRota = setTimeout(function(){
					rota =
						setInterval ( function(rota){
							$(".box").persRota();
							etat = "auto";
						}
						,4000);
				},4000);
			}
		}
	});
</pre>
<p>Donc il reste un peu de boulot et de prise de tête en vue. D'ailleurs si quelqu'un a une solution je suis tout à fait preneur, n'hésitez pas à étaler votre sciences et montrer vos supers pouvoirs de jQuery!</p>
<p><a style="font-size:20px; background:#0066cc; padding:5px 10px; color:#fff; margin-top:5px; float:left;" href="http://web.virtuousquare.fr/wp-content/themes/default/tuto/perspective/perspective2.htm" target="_blank">La démo</a></p>
<p style="clear:both; margin-top:10px;">A bientôt pour la suite du plugin, moussaillons!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://web.virtuousquare.fr/?feed=rss2&amp;p=356</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>4 sites que j&#8217;auais aimé faire ou imaginer le contenu</title>
		<link>http://web.virtuousquare.fr/?p=348</link>
		<comments>http://web.virtuousquare.fr/?p=348#comments</comments>
		<pubDate>Sun, 16 May 2010 14:17:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://web.virtuousquare.fr/?p=348</guid>
		<description><![CDATA[
Il y a un moment que je n&#8217;avais pas posté de festin de webdesign, non pas qu&#8217;il n&#8217;y est rien d&#8217;intéressant sur la toile, mais je suis trop occupé à développer des choses personnelles pour partager&#8230; Mais voici 4 sites que je ne peux m&#8217;empêcher de vous montrer (si vous ne les avez déjà vu).

Le [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://web.virtuousquare.fr/?p=348"><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/05/wish.jpg" alt="" title="wish" width="709" height="200" /></a></p>
<p>Il y a un moment que je n&#8217;avais pas posté de festin de webdesign, non pas qu&#8217;il n&#8217;y est rien d&#8217;intéressant sur la toile, mais je suis trop occupé à développer des choses personnelles pour partager&#8230; Mais voici 4 sites que je ne peux m&#8217;empêcher de vous montrer (si vous ne les avez déjà vu).</p>
<div class="hide_content">
<p>Le site au contenu le plus incroyable que j&#8217;ai vu depuis très longtemps, il y a des idées géniales là-dedans!<br />
<a href="http://desandro.com" target="_blank">desandro.com</a></p>
<p><a href="http://desandro.com" target="_blank"><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/05/wish4.jpg" alt="" title="wish4" width="709" height="500" class="alignnone size-full wp-image-350" /></a></p>
<p>Non seulement j&#8217;admire le contenu de ce site pour sa créativité et son idée d&#8217;origine, mais j&#8217;adore sa structure. Tellement que je vais penser à une refonte de virtuousquare.fr dans ce genre.<br />
<a href="http://www.citid.net" target="_blank">citid.net</a></p>
<p><a href="http://www.citid.net" target="_blank"><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/05/wish1.jpg" alt="" title="wish1" width="709" height="500" /></a></p>
<p>Je ne suis pas un fan des sites en flash, sans doute parce que je n&#8217;ai jamais maitrisé l&#8217;action script, et que je prends ma revanche et mon pied avec javascript. Mais ce site m&#8217;a marqué par sa navigation.<br />
<a href="http://journey-to-zero.com" target="_blank">journey-to-zero.com</a></p>
<p><a href="http://journey-to-zero.com" target="_blank"><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/05/wish3.jpg" alt="" title="wish3" width="709" height="500" /></a></p>
<p>Ce site est relativement simple, mais sa propreté et la qualité de certaines réalisations valent le détour selon moi.<br />
<a href="http://tobiasahlin.com" target="_blank">tobiasahlin.com</a></p>
<p><a href="http://tobiasahlin.com" target="_blank"><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/05/wish2.jpg" alt="" title="wish2" width="709" height="500" /></a></p>
<p>Je me prends actuellement la tête sur 2 plugins que j&#8217;espère présenter bientôt.<br />
A tout&#8217; !</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://web.virtuousquare.fr/?feed=rss2&amp;p=348</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Découper une image avec jQuery (plugin split/er)</title>
		<link>http://web.virtuousquare.fr/?p=332</link>
		<comments>http://web.virtuousquare.fr/?p=332#comments</comments>
		<pubDate>Sat, 08 May 2010 19:08:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://web.virtuousquare.fr/?p=332</guid>
		<description><![CDATA[
Manipuler le DOM ouvre vraiment des perspectives aussi multiples qu&#8217;amusantes. Aujourd&#8217;hui, nous allons faire éclater des images, tout du moins en donner l&#8217;illusion. Tout ça pour afficher un description ou bien faire un effet de transition dans une galerie d&#8217;images.

On voit de plus en plus d&#8217;effet de transition en javascript, des &#8216;fade&#8217;, des &#8217;slideToggle&#8217;, des [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://web.virtuousquare.fr/?p=332"><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/05/visu_split3.jpg" alt="" title="visu_split3" width="709" height="160" /></a></p>
<p>Manipuler le DOM ouvre vraiment des perspectives aussi multiples qu&#8217;amusantes. Aujourd&#8217;hui, nous allons faire éclater des images, tout du moins en donner l&#8217;illusion. Tout ça pour afficher un description ou bien faire un effet de transition dans une galerie d&#8217;images.</p>
<div class="hide_content">
<p>On voit de plus en plus d&#8217;effet de transition en javascript, des &#8216;fade&#8217;, des &#8217;slideToggle&#8217;, des &#8217;slide&#8217;&#8230; Un collègue m&#8217;a montré ce site avec <a href="http://www.chromeexperiments.com/detail/destructive-video/" target="_blank">cet effet d&#8217;explosion</a> qui m&#8217;a inspiré ce script.<br />Alors l&#8217;effet est moins spectaculaire, mais assez sympa pour une transition originale je trouve.</p>
<p>J&#8217;ai imaginé deux applications possible pour cet effet (testé sur firefox 3.6, chrome 3 et safari 4, sur PC).</p>
<p><a href="http://web.virtuousquare.fr/wp-content/themes/default/tuto/split/split.html" target="_blank" style="margin-right:30px;"><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/05/bt_det1.jpg" alt="image" style="border:none;" title="bt_det1" width="301" height="120" /></a><a href="http://web.virtuousquare.fr/wp-content/themes/default/tuto/split/spliter3.html" target="_blank"><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/05/bt_det2.jpg" alt="image" style="border:none;" title="bt_det2" width="301" height="120" /></a></p>
<p>Voyons la première démonstration, qui propose de révéler une description au survol d&#8217;une image et l&#8217;explosion de celle-ci.</p>
<p><a href="http://web.virtuousquare.fr/wp-content/themes/default/tuto/split/split.html" target="_blank"><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/05/visu_split.jpg" alt="" title="visu_split" width="710" height="189" /></a></p>
<p>Comme d&#8217;habitude l&#8217;idée est de rendre les choses faciles à l&#8217;utilisation, alors la structure HTML et le CSS sont très allégés&nbsp;:</p>
<pre class="brush: xml;">
<div class="explosionBox">


<span class="bold">une tr&egrave;s belle image :</span>

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.


<img src="images/img1.jpg" alt="image" />
</div>
</pre>
<pre class="brush: css;">
#container {
	width:900px;
	margin:10px auto;
	position:relative;
}
.explosionBox {
	position:relative;
	float:left;
	margin:0 50px 50px 0;
	width:361px;
	height:276px;
	background:#ddd;
}
.explosionBox p,
.explosionBox img { position:absolute; }
.explosionBox p { padding:10px; }
.hidden { display:none; }
</pre>
<p>Tout simplement dans votre div, le texte et l&#8217;image vont se superposer, et en retirant cette dernière, le texte s&#8217;affichera.</p>
<p>Voyons le javascript :</p>
<pre class="brush: javascript;">
jQuery.fn.split = function() {
	$(this).each(function(){
		$(this).addClass("closed");
		$(this).hover(function(){
			if ($(this).hasClass("closed")) {
				$(this).removeClass("closed").addClass("opened");

				var image = $("img", this);
				var imageSrc = image.attr("src");

				var largeur = image.width();
				var hauteur = image.height();
				var semiLargeur = (image.width())/2;
				var semiHauteur = (image.height())/2;

				$(image).addClass("hidden");
				var box = "
<div class='box' style='position:absolute'><img src='"+ imageSrc +"' alt='image' /></div>

"
				for (i = 0; i < 4; i++) {
					$(box).appendTo(this);
				}

				$(".box", this).css({width : largeur, height : hauteur}).wrap("
<div style='position:absolute; overflow:hidden;' class='quart'></div>

");
				$(".quart", this).css({width : semiLargeur, height : semiHauteur});

				$(".box:eq(0)", this).css({left : 0, top : 0});
				$(".box:eq(1)", this).css({left : -semiLargeur, top : 0});
				$(".box:eq(2)", this).css({left : 0, top : -semiHauteur});
				$(".box:eq(3)", this).css({left : -semiLargeur, top : -semiHauteur});

				$(".quart:eq(0)", this).css({left : 0, top : 0}).animate({left : -semiLargeur, top : -semiHauteur, opacity : 0},300);
				$(".quart:eq(1)", this).css({left : semiLargeur, top : 0}).animate({left : largeur, top : -semiHauteur, opacity : 0},300);
				$(".quart:eq(2)", this).css({left : 0, top : semiHauteur}).animate({left : -semiLargeur, top : hauteur, opacity : 0},300);
				$(".quart:eq(3)", this).css({left : semiLargeur, top : semiHauteur}).animate({left : largeur, top : hauteur, opacity : 0},300);

			}
		},function(){
			if ($(this).hasClass("opened")) {
				$(this).removeClass("opened");

				var image = $("img", this);

				var semiLargeur = (image.width())/2;
				var semiHauteur = (image.height())/2;

				$(".quart:eq(0)", this).animate({left : 0, top : 0, opacity : 1},300, function(){
					$(this).prev("img").removeClass("hidden");
					$(this).parent("div").addClass("closed");
					$(this).remove();
				});
				$(".quart:eq(1)", this).animate({left : semiLargeur, top : 0, opacity : 1},300, function(){
					$(this).remove();
				});
				$(".quart:eq(2)", this).animate({left : 0, top : semiHauteur, opacity : 1},300, function(){
					$(this).remove();
				});
				$(".quart:eq(3)", this).animate({left : semiLargeur, top : semiHauteur, opacity : 1},300, function(){
					$(this).remove();
				});
			}
		});
	});
};
</pre>
<p>Et voici comment l&#8217;appeler :</p>
<pre class="brush: javascript;">
$(document).ready(function(){
	$(".explosionBox").split();
});
</pre>
<p>Vous pouvez appliquer la class sur autant de div que vous le souhaitez.</p>
<p>Voyons le 2<sup>e</sup> exemple</p>
<p><a href="http://web.virtuousquare.fr/wp-content/themes/default/tuto/split/spliter3.html" target="_blank"><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/05/visu_split2.jpg" alt="" title="visu_split2" width="710" height="198" /></a></p>
<p>Voici une autre variante de cet effet de transition, une galerie d&#8217;images qui défilent quand on clique sur celles-ci. Mais cette fois comme l&#8217;évènement est clique, on peut s&#8217;amuser avec la position de celui-ci pour découper l&#8217;image à un endroit précis, et renforcer l&#8217;effet de découpe!</p>
<p>L&#8217;objectif est toujours la simplicité d&#8217;intégration, et donc un HTML super light. Ici on appelle uniquement les images dans une div de votre choix, il suffit juste de déclarer le title pour la description.<br />Important à noter, l&#8217;ordre d&#8217;affichage se fait d&#8217;abord par la dernière image et remonte le DOM, et il faut indiquer les dimension (width et height) de la dernière image pour que l&#8217;affichage soit correct sur chrome et safari au chargement de la page. (Mais vous déclarez déjà les dimensions puisque c&#8217;est une recommandation du W3C, non? ^^)<br />Voici la structure de base :</p>
<pre class="brush: xml;">
<div id="container">
<div class="splitBox">
	<img src="images/image1.jpg" alt="image 1" title="Fille avec hache" />
	<img src="images/image2.jpg" alt="image 2" title="Fille avec cornes" />
	<img src="images/image3.jpg" alt="image 3" title="Fille en maillot" />
	<img src="images/image4.jpg" alt="image 4" title="Fille avec jupe" />
	<img src="images/image5.jpg" alt="image 5" title="Fille avec casquette" width="300" height="471" />
</div>
</div>
</pre>
<p>C&#8217;en est déconcertant de simplicité. Et voici le CSS de base :</p>
<pre class="brush: css;">
#container {
	width:900px;
	margin:10px auto;
}
.splitBox {
	position:relative;
	float:left;
	margin:0 20px 0 0;
	background:#fff;
	border:1px solid #ddd;
}
.splitBox:hover {
	/*box-shadow: 0px 0px 4px #ccc;
	-moz-box-shadow:0px 0px 10px #666;
	-webkit-box-shadow:0px 0px 10px #666;*/
}
.splitBox p,
.splitBox img {
	position:absolute;
	cursor:pointer;
}
.splitBox p {
	padding:5px 10px;
	bottom:0;
	margin:0;
	background:rgba(221, 221, 221, 0.9);

}
</pre>
<p>Vous noterez que j&#8217;ai mis en commentaire un effet de shadow-box sur le bloc lors du survol qui est du plus bel effet, mais ralenti un peu l&#8217;animation d&#8217;explosion, donc selon votre choix.</p>
<p>Voici le javascript qui rend vivant tout ça :</p>
<pre class="brush: javascript;">
jQuery.fn.spliter = function(){
	$(this).each(function(){
		var current = 1;
		var etat = false;
		var images = $(this).children("img");
		var chiffre = images.length;
		var i = chiffre - 1;
		images.hide();
		images.last().show();
		var largeur = images.last().width();
		var hauteur = images.last().height();

		var contentP = $("img:eq(" + i + ")", this).attr("title");
		$(this).append("
<p style='display:none;'>

");
		var largeurPPadding = $("p", this).outerWidth();
		$(this).css({
			width: largeur,
			height: hauteur
		});
		$("p", this).css({
			width: largeur - largeurPPadding
		}).html(current + "/" + chiffre + " : " + contentP);

		$(this).click(function(e){
			if (etat == false) {
				etat = true;
				current++;
				if (current == chiffre + 1) {
					current = 1;
				}
				var i = ($("img", this).length) - 1;
				var image = $("img:eq(" + i + ")", this);
				var imageSrc = image.attr("src");
				var largeur = image.width();
				var hauteur = image.height();
				var posBox = $(this).position();
				var posX = e.pageX - posBox.left;
				var posY = e.pageY - posBox.top;
				var resteX = largeur - posX;
				var resteY = hauteur - posY;
				var imageNext = i - 1;
				var largeurPrev = $("img:eq(" + imageNext + ")", this).width();
				var hauteurPrev = $("img:eq(" + imageNext + ")", this).height();
				var largeurP = $("img:eq(" + imageNext + ")", this).width();

				$(this).animate({
					width: largeurPrev,
					height: hauteurPrev
				}, 600);

				var box = "
<div class='box' style='position:absolute'><img src='" + imageSrc + "' alt='image' /></div>

"

				for (i = 0; i < 4; i++) {
					$(box).appendTo(this);
				}

				$(".box").css({
					width: largeur,
					height: hauteur
				}).wrap("
<div style='position:absolute; overflow:hidden;' class='quart'></div>

");

				$(".box:eq(0)").css({
					left: 0,
					top: 0
				});
				$(".box:eq(1)").css({
					left: -posX,
					top: 0
				});
				$(".box:eq(2)").css({
					left: 0,
					top: -posY
				});
				$(".box:eq(3)").css({
					left: -posX,
					top: -posY
				});

				$(".quart:eq(0)").css({
					left: 0,
					top: 0,
					width: posX,
					height: posY
				}).animate({
					left: -posX,
					top: -posY,
					opacity: 0
				}, 600);
				$(".quart:eq(1)").css({
					left: posX,
					top: 0,
					width: resteX,
					height: posY
				}).animate({
					left: largeur,
					top: -posY,
					opacity: 0
				}, 600);
				$(".quart:eq(2)").css({
					left: 0,
					top: posY,
					width: posX,
					height: resteY
				}).animate({
					left: -posX,
					top: hauteur,
					opacity: 0
				}, 600);
				$(".quart:eq(3)").css({
					left: posX,
					top: posY,
					width: resteX,
					height: resteY
				}).animate({
					left: largeur,
					top: hauteur,
					opacity: 0
				}, 600, function(){
					etat = false;
					$(".quart").remove();
				});

				$(image).prev("img").fadeIn(800);
				$(image).hide().prependTo(this);
				var contentP = $("p", this).prev("img").attr("title");
				$("p", this).animate({
					width: largeurP - largeurPPadding
				}, 600).html(current + "/" + chiffre + " : " + contentP);
			}

		});

		$(this).hover(function(){
			$("p", this).fadeIn(500);
		}, function(){
			$("p", this).stop(true, true).fadeOut();
		});
	});
};
</pre>
<p>J&#8217;essairai de prendre le temps de poser quelques commentaires sur le script, mais si vous avez des questions n&#8217;hésitez pas à les poser.<br />Et l&#8217;appel du plugin :</p>
<pre class="brush: javascript;">
$(document).ready(function(){
	$(".splitBox").spliter();
});
</pre>
<p>Voilà pour cet effet qui peut être repris de nombreuses façons. On m&#8217;a lancé le défi de réaliser quelque chose dans le même genre, mais avec une transition en ondulations, comme à la surface de l&#8217;eau&#8230; Avec du CSS3, sans doute possible&#8230; Encore pas mal de casse-tête en vue.</p>
<p>A bientôt</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://web.virtuousquare.fr/?feed=rss2&amp;p=332</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Ajout du projet &#8216;Aviesan&#8217; dans le portfolio</title>
		<link>http://web.virtuousquare.fr/?p=326</link>
		<comments>http://web.virtuousquare.fr/?p=326#comments</comments>
		<pubDate>Thu, 06 May 2010 19:37:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://web.virtuousquare.fr/?p=326</guid>
		<description><![CDATA[
Cela faisait un moment que le portfolio n&#8217;avait pas évolué, je suis sur pas mal de projet, mais tout avance relativement doucement. Hier j&#8217;ai appris la mise en ligne d&#8217;un site maquetté et intégré il y a plus de deux mois. Je vous invite à le visiter.

Un projet vraiment intéressant que j&#8217;ai réalisé (après quelques [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://aviesan.fr" target="_blank"><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/05/aviesan4.jpg" alt="" title="aviesan4" width="709" height="125" /></a></p>
<p>Cela faisait un moment que le portfolio n&#8217;avait pas évolué, je suis sur pas mal de projet, mais tout avance relativement doucement. Hier j&#8217;ai appris la mise en ligne d&#8217;un site maquetté et intégré il y a plus de deux mois. Je vous invite à le visiter.</p>
<div class="hide_content">
<p>Un projet vraiment intéressant que j&#8217;ai réalisé (après quelques péripéties) et sur lequel je me suis beaucoup amusé. La demande du client était un site qui bouge. Aussi on retrouve pas mal d&#8217;élément qui s&#8217;anime.<br />La structure est assez originale et a demandé un peu de réflexion pour l&#8217;intégration, mais j&#8217;aime les défis.</p>
<p><a href="http://aviesan.fr" target="_blank">Le site aviesan</a>, dans <a href="http://web.virtuousquare.fr/?page_id=4" target="_blank">le portfolio</a></p>
<p><a href="http://aviesan.fr" target="_blank"><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/05/aviesan1.jpg" alt="" title="aviesan1" width="709" height="500" /></a>
</div>
]]></content:encoded>
			<wfw:commentRss>http://web.virtuousquare.fr/?feed=rss2&amp;p=326</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Un carrousel XXL qui s&#8217;adapte (plugin scrollide)</title>
		<link>http://web.virtuousquare.fr/?p=311</link>
		<comments>http://web.virtuousquare.fr/?p=311#comments</comments>
		<pubDate>Mon, 03 May 2010 20:42:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://web.virtuousquare.fr/?p=311</guid>
		<description><![CDATA[
Je continue mon perfectionnement (apprentissage) jQuery et pour cela je revisite les classiques des plugins. Cette fois on s&#8217;attaque au carrousel &#8230; Comment ça encore un ? On n&#8217;a jamais assez de carrousel à disposition! Et puis c&#8217;est un bon apprentissage.

Pour rendre cette article un peu plus agréable à lire, l&#8217;ami Sam m&#8217;a donné une [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://web.virtuousquare.fr/wp-content/themes/default/tuto/scroll_site/index.html" target="_blank"><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/05/scrollide.png" alt="" title="scrollide" width="709" height="166" /></a></p>
<p>Je continue mon perfectionnement (apprentissage) jQuery et pour cela je revisite les classiques des plugins. Cette fois on s&#8217;attaque au carrousel &#8230; Comment ça encore un ? On n&#8217;a jamais assez de carrousel à disposition! Et puis c&#8217;est un bon apprentissage.</p>
<div class="hide_content">
<p>Pour rendre cette article un peu plus agréable à lire, l&#8217;ami Sam m&#8217;a donné une idée avec <a href="http://cuttingpapers.com/" target="_blank">son site</a> sur lequel il doit publier des interviews, même si on n&#8217;en a pas encore vu la couleur. Donc je vais (essayer) de rédiger ce tutoriel comme un interview, j&#8217;ai trouvé quelqu&#8217;un pour poser des questions sur le plugin et je me ferai une joie de lui répondre.</p>
<p><strong>Le testeur :</strong> Mais pourquoi un nouveau plugin de carrousel, comme si il n&#8217;y en avait pas assez ? Et d&#8217;où vient son nom &#8217;scrollide&#8217; ?</p>
<p><strong>Virtuous :</strong> Et pourquoi pas ? Développer son plugin c&#8217;est l&#8217;assurance d&#8217;un plugin optimisé pour son besoin (quand il est bien fait <img src='http://web.virtuousquare.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).<br />Pour le nom, j&#8217;ai eu un éclair de génie, j&#8217;ai fusionné scroll et slide, scrollide&#8230;</p>
<p><strong>Le testeur :</strong> Euh mouai&#8230; Et qu&#8217;est ce qu&#8217;il a d&#8217;original ce carrousel ?</p>
<p><strong>Virtuous :</strong> L&#8217;idée de départ est un carrousel dont le cadre serait la pleine largeur de la page et d&#8217;afficher un seul élément à la fois. Pour cela ils est possible de forcer l&#8217;espacement des éléments exagérément pour être sûr qu&#8217;un seul élément s&#8217;affiche, mais l&#8217;effet ne serait pas très agréable avec trop d&#8217;espacement pour rien, aussi dans ce plugin tout s&#8217;adapte. Ensuite un point important est que les puces qui permettent de naviguer entre les éléments sont générées par javascript, inutile de les écrire dans le HTML et de les positionner. Et le top, c&#8217;est le tooltip qui met en exergue le texte de votre choix de chaque élément pour l&#8217;identifier.</p>
<p><strong>Le testeur :</strong> Ouai en gros c&#8217;est un carrousel comme les autres&#8230; Mais est ce qu&#8217;il y a une démonstration pour se faire une idée plus précise ?</p>
<p><strong>Virtuous :</strong> Bien entendu, voici <a href="http://web.virtuousquare.fr/wp-content/themes/default/tuto/scroll_site/index.html" target="_blank">la démonstration</a><br />Et <a href="http://web.virtuousquare.fr/wp-content/themes/default/tuto/scroll_site/js/scrollide.js" target="_blank">le plugin</a></p>
<p><strong>Le testeur :</strong> Oh en plus vous avez mis du CSS3 dans l&#8217;exemple. Peut-on voir la struture HTML de base ?</p>
<p><strong>Virtuous :</strong> Oui ça en jette toujours le font-face. Pour la structure, je vais vous présenter la structure de base :</p>
<pre class="brush: xml;">
<div id="container">
<a href="javascript:void(0)" class="gauche">gauche</a>
<div id="slider">
<div></div>

....
<div></div>
</div>

<a href="javascript:void(0)" class="droite">droite</a>
</div>
</pre>
<p>C&#8217;est très simple, ici &#8216;container&#8217; joue le rôle de positionneur. La div &#8217;slider&#8217; sera notre bloc conteneur et qui se déplacera, les div qu&#8217;il contient étant chacune un élément qui s&#8217;affiche tour à tour. Les boutons sont à placer de chaque côté de la div conteneur. A noter que j&#8217;ai donné des id et class dans mon exemple, mais vous pouvez choisir celles que vous voulez sans toucher au plugin.</p>
<p><strong>Le testeur :</strong> C&#8217;est bien beau tout ça, mais quelles sont les classes générées si je veux customiser mes boutons et autres, à quoi doit ressembler mon CSS ?</p>
<p><strong>Virtuous :</strong> Certaines classes sont générées par la javascript, je vais donc vous indiquer lesquelles et présenter le CSS minimum requis pour faire fonctionner le plugin.</p>
<pre class="brush: css;">
body { overflow-x:hidden; } /*Permet de masquer le scroll horizontal de la page*/
#container { /*Ce bloc dont vous pouvez choisir le nom, est l'élément positionneur*/
	width:970px; /*pour l'exemple*/
	margin:0 auto; /*le plugin est fait pour les structures centrées!*/
	position:relative; /*Important pour la position*/
}
#container a.droite,
#container a.gauche { /*Les liens dont le nom est au choix*/
	position:absolute; /*Plus faciles à positionner*/
	top:220px; /*pour l'exemple*/
	z-index:10; /*A gérer suivant vos besoins*/
}
#container a.droite {
	right:0; /*Positionne le lien à droite*/
}
#slider { /*Ce bloc dont vous pouvez choisir le nom, est l'élément conteneur*/
	position:absolute; /*Il va se déplacer!*/
	float:left;
}
.diapo { /*Ce bloc dont vous pouvez choisir le nom, sera la référence pour chaque fenêtre*/
	width:970px; /*pour l'exemple*/
	height:450px;  /*pour l'exemple*/
}
ul.lister { /*Liste générée par le javascript pour les puces*/
	position:absolute; /*Important pour le positionnement*/
	left:0; /*facultatif puisque la liste est repositionnée au centre*/
	top:400px; /*Ajoutez la hauteur que vous voulez*/
	z-index:9; /*A gérer suivant votre besoin*/
}
.lister li { /*Listes générées par le javascript*/
	float:left; /*Important pour leurs positionnements*/
	list-style:none; /*De préférence*/
	margin-right:10px; /*Pour l'exemple, géré selon le besoin*/
	position:relative; /*Important pour positionner le tooltip*/
	width:26px; /*Pour l'exemple*/
	height:26px; /*Pour l'exemple*/
	background:url(../images/puce.png) top no-repeat; /*Pour l'exemple*/
	cursor:pointer; /*Pour donner l'effet 'lien'*/
}
.lister li span { /*Va afficher le texte pris dans la fenêtre que vous avez choisi en variable (h2 par défaut)*/
	position:absolute; /*Important pour le positionnement*/
	width:100px; /*Pour l'exemple*/
	bottom:30px; /*Pour l'exemple*/
	padding:5px 10px; /*Pour l'exemple*/
	background:#be997f; /*Pour l'exemple*/
	text-align:center; /*Pour l'exemple*/
	color:#fff; /*Pour l'exemple*/
}
.lister li.current { /*Cette class est ajoutée à la puce dont la fenêtre est affichée*/
	background-position:bottom;
}
</pre>
<p>Voilà ce qu&#8217;il y a à savoir pour une configuration minimale. après vous pouvez habiller à votre goût.</p>
<p><strong>Le testeur :</strong> Ok, et peut-on avoir un aperçu du javascript ? Je parie que c&#8217;est un gros fouilli!</p>
<p><strong>Virtuous :</strong> C&#8217;est vrai que ce n&#8217;est pas organisé de façon optimum, mais j&#8217;espère que ça vous semblera clair, je vais commenter les parties importantes.</p>
<pre class="brush: javascript;">
jQuery.fn.scrollide = function(options) { /*Initialise la fonction*/
	var defaults = { /*Variable par défaut*/
		cible: "h2" /*Référence de ce qui sera affiché dans le tooltip des puces*/
	};

	var opts = jQuery.extend(defaults, options);

	$(this).children("div").wrap("
<div style='float:left'></div>

"); /*Pour chaque bloc, on créé une enveloppe qui va positionner la suivante hors du cadre de la fenêtre*/

	var diapos = $(this).children("div").children("div").length;
	var largeur = $(this).children("div").children("div").width();

	var decalage = ($(window).width() - largeur)/2; /*L'espace entre le bord du bloc et le bord de la fenêtre*/
	var wrap = largeur + decalage + 10;

	$(this).children("div").css({width : wrap});

	var largeurTot = diapos*wrap;
	$(this).css({width : largeurTot}); /*Défnit la largeur totale du bloc conteneur*/

	var current = 0;
	var element = $(this);
	var elementParent = $(this).parent().parent();

	$("
<ul class='lister'></ul>

").prependTo(elementParent); /*On génère la liste des puces*/
	for (i = 0; i < diapos; i++) {
		var textes = $(".diapo:eq("+ i +") "+ opts.cible +"").text();
		$("ul.lister").append("
<li class='"+ i +"'><span>"+ textes +"</span></li>

"); /*On injecte le contenu voulu pour le tooltip*/
	}

	var ulLargeur = $("ul.lister").width();
	var posList = (($(elementParent).width())/2) - (ulLargeur/2);
	$("ul.lister").css({left : posList}); /*On positionne la liste au centre*/

	/*Fonctionnement du tooltip*/
	var toolLargeur = $("li span").width();
	$("ul.lister li span").hide().css({left : -(toolLargeur/2)});
	$("ul.lister li").hover(function(){
		$(this).find("span").fadeIn();
	},function(){
		$(this).find("span").stop(true,true).fadeOut();
	});

	$("ul.lister li:eq("+ current +")").addClass("current");
	var prevBtn = $(this).prev("a");
	var nextBtn = $(this).next("a");
	$(prevBtn).hide(); /*Ce bouton est toujours caché à l'initialisation*/

	$(prevBtn).click(function(){ /*Pour le clique gauche*/
		if (current > 0) {
			current--;
			if (current == 0) {
				$(this).fadeOut();
			}
			if (current < diapos - 1) {
				$(nextBtn).fadeIn();
			}
			$(element).animate({left : '+=' + wrap},500);
			$("ul.lister li").removeClass("current");
			$("ul.lister li:eq("+ current +")").addClass("current");
		}
	});
	$(nextBtn).click(function(){ /*Pour le clique droit*/
		if (current < diapos - 1) {
			current++;
			if (current == diapos - 1) {
				$(this).fadeOut();
			}
			if (current > 0) {
				$(prevBtn).fadeIn();
			}
			$(element).animate({left : '-=' + wrap},500);
			$("ul.lister li").removeClass("current");
			$("ul.lister li:eq("+ current +")").addClass("current");
		}
	});

	$("ul.lister li").click(function(){ /*Pour l'utilisation des puces*/
		var attr = $(this).attr("class");
		current = attr;
		if (current == 0) {
			$(prevBtn).fadeOut();
		}
		if (current < diapos - 1) {
			$(nextBtn).fadeIn();
		}
		if (current == diapos - 1) {
			$(nextBtn).fadeOut();
		}
		if (current > 0) {
			$(prevBtn).fadeIn();
		}
		$(element).animate({left : attr*-wrap},500);
		$("ul.lister li").removeClass("current");
		$(this).addClass("current");
	});
};
</pre>
<p>Voilà pour le javascript.</p>
<p><strong>Le testeur :</strong> C&#8217;est pas très bien expliqué tout ça, enfin bref. Comment fait-on pour appeler cette fonction scrollide et surtout gérer la variable du tooltip ?</p>
<p><strong>Virtuous :</strong> Bonne question! C&#8217;est tout simple, voici ce que vous devez mettre dans votre page :</p>
<pre class="brush: javascript">
$(document).ready(function(){
	$("#slider").scrollide({
		cible: "h3"
	});
});
</pre>
<p>Dans l&#8217;exemple on a ciblé les h3 de chaque bloc pour les injecter dans les tooltips des puces. (Pour rappel c&#8217;est h2 par défaut).</p>
<p>Voilà pour l&#8217;explication du fonctionnement du plugin, j&#8217;espère que ce n&#8217;est pas trop confus. C&#8217;est loin d&#8217;être parfait, mais ça fonctionne (testé sur firefox 3.6, le dernier chrome et safari, ainsi que Opera 10.52).</p>
<p>Vous aurez deviné que le testeur était autre que moi-même. quelqu&#8217;un se prêtera peut etre au jeu la prochaine fois ? :p</p>
<p>Le prochain article est déjà en chantier, alors à bientôt pour de nouvelles aventures avec jQuery!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://web.virtuousquare.fr/?feed=rss2&amp;p=311</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Effets de lumières sous-marine avec jQuery et du CSS3 (subMarine plugin)</title>
		<link>http://web.virtuousquare.fr/?p=303</link>
		<comments>http://web.virtuousquare.fr/?p=303#comments</comments>
		<pubDate>Thu, 29 Apr 2010 20:02:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CSS3]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://web.virtuousquare.fr/?p=303</guid>
		<description><![CDATA[
D&#8217;habitude j&#8217;essaie de faire des articles avec des javascripts qui pourront être utiles&#8230; Dans le sens fonctionnels. Mais aujourd&#8217;hui je vous présente un petit script complètement inutile, mais dont je trouve l&#8217;effet assez jolie. Et une fois n&#8217;est pas coutume je vous l&#8217;ai mis en plugin.

L&#8217;objectif de ce script était de créer une ambiance dans [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://web.virtuousquare.fr/wp-content/themes/default/tuto/submarine/sous_marin.html" target="_blank"><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/04/submarine.jpg" alt="" title="submarine" width="709" height="143" /></a></p>
<p>D&#8217;habitude j&#8217;essaie de faire des articles avec des javascripts qui pourront être utiles&#8230; Dans le sens fonctionnels. Mais aujourd&#8217;hui je vous présente un petit script complètement inutile, mais dont je trouve l&#8217;effet assez jolie. Et une fois n&#8217;est pas coutume je vous l&#8217;ai mis en plugin.</p>
<div class="hide_content">
<p>L&#8217;objectif de ce script était de créer une ambiance dans une page web, et pour cela il fallait éviter que l&#8217;effet soit redondant pour ne pas lasser. Aussi la plupart des éléments de ce script seront complètement aléatoires. Pour cela la page ne doit contenir aucun élément à la base pour que nous puissions jouer avec différentes variables comme le nombre. Nous jouerons aussi avec la hauteur des rayons et leurs largeurs, ainsi que l&#8217;opacité. Pour cela rien de tel que du CSS3 plutôt que des images!</p>
<p><a href="http://web.virtuousquare.fr/wp-content/themes/default/tuto/submarine/sous_marin.html" target="_blank">La démonstration</a></p>
<p><a href="http://web.virtuousquare.fr/wp-content/themes/default/tuto/submarine/js/jquery-submarine.js" target="_blank">Le plugin subMarine</a></p>
<p>Cet effet fonctionne sur les navigateurs supportant le CSS3 bien sûr, soit les derniers Firefox, Safari, Chrome et sans doute sur mac (clin d&#8217;oeil dans la direction d&#8217;un certain Manu). Je remarque les limites de mon navigateur favori Firefox qui rame un peu sur l&#8217;animation, contrairement aux 2 autres qui assurent.</p>
<p>Ce petit effet utilise notre bonne bibliothèque jQuery, et le <a href="http://jquery.offput.ca/every/" target="_blank">plugin timers</a> (par conséquent il faudra utiliser la version 1.3.2 de jQuery, sinon vous devrez utiliser un bon vieux setInterval pour faire la boucle, ce qui n&#8217;est pas plus mal.)</p>
<p>Notre structure HTML est archi simple, en effet nous allons nous servir d&#8217;un repère et créer à l&#8217;intérieur les élement qui feront les rayons.</p>
<pre class="brush: xml;">
<div id="reflets"></div>
</pre>
<p>Puis voici le CSS assez léger également, mais comportant tout le CSS3 pour créer notre reflet. J&#8217;aurais aussi pu faire le dégradé du background&#8230;  mais je ne l&#8217;ai pas fait&#8230; Si vous voulez changer la couleur du background il vous faudra aussi adapter la couleur de fin du reflet. On utilise des tailles par défaut mais qui seront recalculées par javascript, ainsi que l&#8217;opacité.</p>
<pre class="brush: css;">
body {
	background:#006699 url(../images/top.png) repeat-x;
}
#reflets {
	position:relative;
	width:900px;
	margin:0 auto;
}
.gradient {
	position:absolute;
	background: #fff; /* for non-css3 browsers */
	background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#006699)); /* for webkit browsers */
	background: -moz-linear-gradient(top,  #fff,  #006699); /* for firefox 3.6+ */
	-webkit-transform: rotate(-15deg);
	-moz-transform: rotate(-15deg);
	-o-transform: rotate(-15deg);
	opacity:0.3;
	top:-20px;
}
</pre>
<p>Voici comment appeler le plugin, si vous utilisez un id &#8216;reflets&#8217; :</p>
<pre class="brush: javascript;">
$(document).ready(function(){
	$("#reflets").subMarine();
});
</pre>
<p>Je vous mets également le plugin complet ici, si vous voulez le détailler tranquillement.</p>
<pre class="brush: javascript;">
jQuery.fn.subMarine = function(){
	var bloc = $(this).width();
    var chiffre = (Math.floor(Math.random() * 10)) + 5;
    for (i = 0; i < chiffre; i++) {
        $(this).append('
<div class="gradient g' + i + '"></div>

');
        var pos = Math.floor(Math.random() * bloc);
        var hauteur = (Math.floor(Math.random() * 100)) + 200;
        var largeur = (Math.floor(Math.random() * 30)) + 20;
        $(".g" + i).css({
            left: pos,
            height: hauteur,
            width: largeur,
            opacity: 0
        });
        jQuery.fn.mouv = function(){
            var posNew = Math.floor(Math.random() * bloc);
            var hauteurNew = (Math.floor(Math.random() * 100)) + 200;
            var largeurNew = (Math.floor(Math.random() * 30)) + 20;
            var niveau = (Math.random() * 0.3) + 0.2;
            var duree = (Math.floor(Math.random() * 3000)) + 15000;
            $(this).animate({
                left: posNew,
                height: hauteurNew,
                width: largeurNew,
                opacity: niveau
            }, duree);
        };
        $(".g" + i).mouv();
        var j = i;
        for (j = 0; j < chiffre; j++) {
            $(".g" + i).everyTime(15000, function(){
                $(this).mouv();
            });
        }
    }
};
</pre>
<p>Alors je n'ai pas fait le boulot complètement, car l'idéal aurait été que je mette des petites variables à modifier à l'extérieur, comme le nombre minimum et max... J'ajouterai ça plus tard. ^^</p>
<p>J'espère que ce petit script vous inspirera, n'hésitez pas à donner vos remarques.<br />A bientôt !</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://web.virtuousquare.fr/?feed=rss2&amp;p=303</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Un carrousel circulaire avec jQuery et jQuery Path</title>
		<link>http://web.virtuousquare.fr/?p=294</link>
		<comments>http://web.virtuousquare.fr/?p=294#comments</comments>
		<pubDate>Sun, 25 Apr 2010 21:19:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://web.virtuousquare.fr/?p=294</guid>
		<description><![CDATA[
Je cherchais une autre utilisation à ce très bon plugin qu&#8217;est jQuery Path et j&#8217;ai pensé à un carrousel dont les éléments se déplacerait sur un cercle, rien de bien extraordinaire, mais un effet sympa et surtout un exercice plus dur que ce à quoi je m&#8217;attendais.

Tout d&#8217;abord je remercie Fabien pour son aide sans [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/04/carrousel.jpg" alt="" title="carrousel" width="709" height="143" /></p>
<p>Je cherchais une autre utilisation à ce très bon plugin qu&#8217;est <a href="http://blog.parkerfox.co.uk/2009/09/22/bezier-curves-and-arcs-in-jquery/" target="_blank">jQuery Path</a> et j&#8217;ai pensé à un carrousel dont les éléments se déplacerait sur un cercle, rien de bien extraordinaire, mais un effet sympa et surtout un exercice plus dur que ce à quoi je m&#8217;attendais.</p>
<div class="hide_content">
<p>Tout d&#8217;abord je remercie Fabien pour son aide sans qui je n&#8217;aurais sans doute pas réussi, mais je pense qu&#8217;il a aussi bien apprécier ce petit casse-tête, dont voici le résultat.</p>
<p><a href="http://web.virtuousquare.fr/wp-content/themes/default/tuto/carrousel/carrousel3.html" target="_blank">La démo du carroussel</a></p>
<p>Cet effet n&#8217;est pas sans rappeler celui du <a href="http://fredhq.com/projects/roundabout/" target="_blank">plugin roundAbout</a>, mais il apporte quelques différences notables qui pourraient être utiles à certains.</p>
<p>Voici la structure HTML :</p>
<pre class="brush: xml;">
<div id="container">
<ul>
<li><img src="images/img1.jpg" alt="image" /></li>
<li><img src="images/img2.jpg" alt="image" /></li>
<li><img src="images/img3.jpg" alt="image" /></li>
<li><img src="images/img4.jpg" alt="image" /></li>
<li><img src="images/img2.jpg" alt="image" /></li>
<li><img src="images/img3.jpg" alt="image" /></li>
<li><img src="images/img4.jpg" alt="image" /></li>
</ul>

		<button class="droite">A droite !</button>
		<button class="gauche">A gauche !</button>
	</div>
</pre>
<p>Dans notre exemple le carrousel occupe toute la largeur de la page et les éléments du haut sortent du cadre.<br />Nous plaçons toutes les images (dont la taille peut varier) dans une liste toute simple. Puis nous ajoutons 2 boutons à sa suite. Tout simplement.</p>
<p>Puis vient le CSS :</p>
<pre class="brush: css;">
#container {
	width:100%;
	overflow:hidden;
	height:500px;
}
#container ul {
	margin:200px auto;
	position:relative;
	width:370px;
}
#container li {
	list-style:none;
	position:absolute;
}
.gauche,
.droite { position:absolute; }
.gauche { left:200px; }
.droite { right:200px; }
</pre>
<p>Nous déclarons une taille au container pour qu&#8217;il puisse afficher les éléments, mais vous pouvez adapter à votre guise, de même que pour la liste.<br/>Les éléments de la liste doivent être positionnés par rapport à celle-ci.</p>
<p>Encore du tout simple, j&#8217;aime ça! A ce stade tous vos éléments doivent s&#8217;afficher les uns sur les autres, pas de panique javascript va nous positionner tout ça.</p>
<p>Pour faire fonctionner ce script vous aurez donc besoin de jquery et de <a href="http://blog.parkerfox.co.uk/2009/09/22/bezier-curves-and-arcs-in-jquery/" target="_blank">jQuery Path</a>!<br />Allons-y pour le script :</p>
<pre class="brush: javascript;">
var nombre = $("#container ul li").length;
	var ecart = 360/nombre;
	var posDep = 0;
	var posArr = 0;
	var current = 0;
	var centerX = 0;
	var centerY = -500;
	var radius = 500;
	for (i = 0; i < nombre; i++) {
		posDep = i*ecart;
		posArr = posDep - ecart;
		eval("var arc_params" + i +" = {center: [centerX, centerY],radius: radius,start: posDep,end: posArr,dir: 1}");
		$("#container li:eq(" + i + ")").animate({
			path: new $.path.arc(eval("arc_params" + i))
		},0);
	}
	$("button.gauche").click(function(){
		for (i = 0; i < nombre; i++) {
			var newstart = eval("arc_params" + i +".start;");
			var newend = eval("arc_params" + i +".end;");
			var dir = eval("arc_params" + i +".dir;");
			newstart = newend;
			newend += ecart;
			dir = 1;
			eval("arc_params" + i +".start = newstart; arc_params" + i +".end = newend; arc_params" + i +".dir = dir;");
			$("#container li:eq(" + i + ")").animate({
				path: new $.path.arc(eval("arc_params" + i))
			},500);
		}
	});
	$("button.droite").click(function(){
		for (i = 0; i < nombre; i++) {
			var newstart = eval("arc_params" + i +".start;");
			var newend = eval("arc_params" + i +".end;");
			var dir = eval("arc_params" + i +".dir;");
			newstart = newend;
			newend -= ecart;
			dir = -1;
			eval("arc_params" + i +".start = newstart; arc_params" + i +".end = newend; arc_params" + i +".dir = dir;");
			$("#container li:eq(" + i + ")").animate({
				path: new $.path.arc(eval("arc_params" + i))
			},500);
		}
	});
</pre>
<p>La première partie va définir les différentes variables utilisées, les images se placeront automatiquement suivant leurs nombres, super!!<br />Vous pouvez modifier le rayon du cercle et la position de son centre.<br />On ne peut utiliser que l'effet 'animate' avec jQuery Path, donc pour positionner les images on dit que cet effet dure 0 seconde, pour que ce soit instantané.</p>
<p>La suite (un peu redondante) va servir pour les événements de click. On redéfinit à chaque clique les positions de départ et d'arrivée et suivant le bouton on change la direction.</p>
<p>Voilà pour ce petit tuto, encore un peu rapide. J'espère que vous trouverez des applications ou que ça vous donnera des idées.</p>
<p>Merci de l'avoir lu et à bientôt!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://web.virtuousquare.fr/?feed=rss2&amp;p=294</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>2 exemples de navigation suivant la souris avec jQuery</title>
		<link>http://web.virtuousquare.fr/?p=283</link>
		<comments>http://web.virtuousquare.fr/?p=283#comments</comments>
		<pubDate>Wed, 21 Apr 2010 19:41:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://web.virtuousquare.fr/?p=283</guid>
		<description><![CDATA[
Je continue de partager avec vous les choses qui me passent par la tête et que je me débrouille (tant bien que mal) à réaliser.
Vous vous souvenez de ces navigations flash qui suivaient la souris et qui se déployaient autour du curseur ? Amusons-nous avec notre bibliothèque javascript préférée.

Il y a de nombreuses façons d&#8217;appliquer [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/04/menu.png" alt="" title="menu" width="709" height="143" /></p>
<p>Je continue de partager avec vous les choses qui me passent par la tête et que je me débrouille (tant bien que mal) à réaliser.<br />
Vous vous souvenez de ces navigations flash qui suivaient la souris et qui se déployaient autour du curseur ? Amusons-nous avec notre bibliothèque javascript préférée.</p>
<div class="hide_content">
<p>Il y a de nombreuses façons d&#8217;appliquer ce concept de menu mobile, je vous propose 2 possibilités.</p>
<p>La première étant un bloc glissant sur le côté et suivant les mouvements de la souris seulement dans l&#8217;axe verticale, et un menu qui se déploie sur toute la longueur de la colonne de contenu.</p>
<p><a href="http://web.virtuousquare.fr/wp-content/themes/default/tuto/menu/menu2.html" target="_blank">La démo 1</a></p>
<p><a href="http://web.virtuousquare.fr/wp-content/themes/default/tuto/menu/menu2.html" target="_blank"><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/04/menu2.jpg" alt="" title="menu2" width="709" height="143" /></a></p>
<p>Voici la structure HTML du menu uniquement</p>
<pre class="brush: xml;">
<div class="close" id="menu">
	<span class="opener">Open menu</span>
<ul>
<li><a href="#">Premier lien</a></li>
<li><a href="#">Deuxième lien</a></li>
<li><a href="#">Troisième lien</a></li>
</ul>
</div>
</pre>
<p>Le menu étant le bloc qui va contenir toute la navigation. On place les boutons dans une liste qu&#8217;on camoufle et qui s&#8217;ouvrira quand on cliquera sur le &#8217;bouton opener&#8217;.</p>
<p>Voici le CSS :</p>
<pre class="brush:css;">
#container {
	position:relative;
	width:800px;
	margin:0 auto;
	padding:50px 20px;
	height:1200px;
	background:#fefefe;
	border:1px solid #eee;
	border-top:none;
	border-bottom:none;
}
#menu {
	position:absolute;
	display:block;
	padding:0;
	color:#fff;
	left:0;
	top:0;
	width:840px;
	height:40px;
}
.opener {
	cursor:pointer;
	position:absolute;
	float:left;
	width:120px;
	background:#555;
	text-align:center;
	padding:10px 0;
	color:#fff;
	left:-110px;
	border-right:1px solid #ddd;
	-webkit-border-radius:4px 0 0 4px;
	-moz-border-radius:4px 0 0 4px;
	/*border-radius:4px 0 0 4px;*/
}
.opener:hover,
.opener:focus,
.opened {
	background:#eee;
	color:#474747;
}
#menu ul {
	margin:0;
	height:38px;
	width:840px;
	background:#eee;
}
#menu li {
	float:left;
	list-style:none;
	border-right:1px solid #ddd;
	padding:0;
}
#menu li a {
	float:left;
	padding:10px 20px 9px 20px;
	background:#eee;
}
#menu li a:hover {
	background:#eee;
}
</pre>
<p>Et sans plus de détails, voici le javascript :</p>
<pre class="brush:javascript;">
$(document).mousemove(function(e){
	$(".close").stop(true,false).animate({top : (e.pageY - 15)},500)
});
$("#menu ul").hide();
$("#menu span").click(function(){
	$(this).removeClass('close');
	$("#menu ul").slideDown();
	$("#menu .opener").addClass('opened');
});
$("#menu").mouseleave(function(){
	$(this).addClass('close');
	$("#menu ul").slideUp();
	$("#menu .opener").removeClass('opened');
});
</pre>
<p>Ce qui est essentiel ici, c&#8217;est la petite fonction qui passe presque inaperçu &#8216;.pageY&#8217; qui va nous renvoyer la position de notre souris (verticalement). Et grâce au  &#8216;animate&#8217;, nous allons donner l&#8217;impression que le bloc suit la souris, n&#8217;oubliez pas le &#8217;stop(true,false)&#8217; pour la fonction se recharge au moindre déplacement.</p>
<p>Et voici le deuxième menu qu&#8217;on faisait il n&#8217;y a pas si longtemps que ça entièrement en flash, mais c&#8217;est beaucoup de contraintes, et javascript c&#8217;est quand même bien plus marrant, non ? :p</p>
<p>Voici <a href="http://web.virtuousquare.fr/wp-content/themes/default/tuto/menu/menu4.html" target="_blank">la démo 2</a></p>
<p><a href="http://web.virtuousquare.fr/wp-content/themes/default/tuto/menu/menu4.html" target="_blank"><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/04/menu.png" alt="" title="menu" width="709" height="143" /></a></p>
<p>Et la structure HTML du menu :</p>
<pre class="brush:xml;">
<div id="menu" class="close">
	<span class="note">Keep pressing 'UP'To open the menu</span>
<div id="bloc">
		<a href="http://web.virtuousquare.fr/?p=283" class="home"><span>Home</span></a>
		<a href="http://web.virtuousquare.fr/?p=283" class="about"><span>About</span></a>
		<a href="http://web.virtuousquare.fr/?p=283" class="folio"><span>Portfolio</span></a>
		<a href="http://web.virtuousquare.fr/?p=283" class="contact"><span>Contact</span></a>
		<a href="http://web.virtuousquare.fr/?p=283" class="rss"><span>Flux&nbsp;RSS</span></a>
		<a href="http://web.virtuousquare.fr/?p=283" class="links"><span>Links</span></a>
	</div>
</div>
</pre>
<p>Et le CSS associé :</p>
<pre class="brush:css;">
#container {
	position:relative;
	width:800px;
	margin:0 auto;
	padding:50px 20px;
	height:1200px;
	background:#fefefe;
	border:1px solid #eee;
	border-top:none;
	border-bottom:none;
}
#menu {
	position:absolute;
	width:100px;
	height:100px;
}
#menu a {
	float:left;
	width:32px;
	height:32px;
	position:absolute;
	display:none;
}
#menu a.home {
	background:url(../images/Home.png) no-repeat;
	top:80px;
	left:34px;
}
#menu a.about {
	background:url(../images/User.png) no-repeat;
	top:-20px;
	left:34px;
}
#menu a.folio {
	background:url(../images/Pictures.png) no-repeat;
	top:10px;
	left:75px;
}
#menu a.contact {
	background:url(../images/Chat.png) no-repeat;
	top:60px;
	left:75px;
}
#menu a.rss {
	background:url(../images/RSS.png) no-repeat;
	top:60px;
	left:-10px;
}
#menu a.links {
	background:url(../images/Address_Book.png) no-repeat;
	top:10px;
	left:-10px;
}
#menu a span {
	display:none;
	position:absolute;
	padding:3px 5px;
	-webkit-border-radius:4px;
	-moz-border-radius:4px;
	/*border-radius:4px;*/
	background:#666;
	color:#fff;
	top:-30px;
	z-index:9;
}
.note {
	background:#666;
	color:#fff;
	display:block;
	padding:5px;
	-webkit-border-radius:4px;
	-moz-border-radius:4px;
	/*border-radius:4px;*/
	width:110px;
}
</pre>
<p>Ici j&#8217;ai placé les images en absolue et j&#8217;ai indiqué leur position en top et left, mais j&#8217;aurais pu m&#8217;en passer puisque les icônes sont cachées et se positionnent grâce au javascript quand elles apparaissent.</p>
<p>Et le petit javascript qui va avec :</p>
<pre class="brush: javascript;">
var winWidth = $(window).width();
	var contWidth = $("#container").width();
	var decalage = ((winWidth - contWidth) / 2);

	jQuery.fn.follow = function(){
		$(document).mousemove(function(e){
			$(".close").css({top : (e.pageY - 50), left : ((e.pageX - decalage)-30)});
		});
	};

	const mobil = 0;
	const arret = 1;
	var deplac = mobil;

	$("#menu").addClass('close').follow();

	$(window).keydown(function(event) {
		var arc_paramsHome = {
	    	center: [34,30],
	        radius: 50,
	        start: 0,
	        end: 1,
	        dir: -1
		}
		var arc_paramsAbout = {
	    	center: [34,30],
	        radius: 50,
	        start: 180,
	        end: 181,
	        dir: -1
		}
		var arc_paramsFolio = {
	    	center: [34,30],
	        radius: 50,
	        start: 120,
	        end: 121,
	        dir: -1
		}
		var arc_paramsContact = {
	    	center: [34,30],
	        radius: 50,
	        start: 60,
	        end: 61,
	        dir: -1
		}
		var arc_paramsRss = {
	    	center: [34,30],
	        radius: 50,
	        start: 300,
	        end: 301,
	        dir: -1
		}
		var arc_paramsLinks = {
	    	center: [34,30],
	        radius: 50,
	        start: 240,
	        end: 241,
	        dir: -1
		}

		$("#menu a").hover(function(){
			$(this).find("span").fadeIn();
		},function(){
			$(this).find("span").stop(true,true).fadeOut();
		});

		if (event.keyCode == '38') {
			if (deplac == mobil) {
				deplac = arret;
				$("#menu").removeClass('close');
				$("#bloc a").fadeIn(50);
				$("#menu .note").fadeOut();
				$("#menu a.home").animate({path : new $.path.arc(arc_paramsHome)},500);
				$("#menu a.about").animate({path : new $.path.arc(arc_paramsAbout)},500);
				$("#menu a.folio").animate({path : new $.path.arc(arc_paramsFolio)},500);
				$("#menu a.contact").animate({path : new $.path.arc(arc_paramsContact)},500);
				$("#menu a.rss").animate({path : new $.path.arc(arc_paramsRss)},500);
				$("#menu a.links").animate({path : new $.path.arc(arc_paramsLinks)},500);
			};
		};
	});
	$(window).keyup(function(event) {
		deplac = mobil;
		$("#bloc a").fadeOut(function(){
			$("#menu .note").fadeIn();
		});
		$("#menu").addClass('close');
	});
</pre>
<p>Comme ça il a l&#8217;air grand, mais c&#8217;est que je n&#8217;ai pas trouvé le moyen de réduire les variables de rotations.</p>
<p>On utilise les fameux .pageX et .pageY pour récupérer la position de la souris et on positionne le menu grâce à un &#8216;.css()&#8217; qui nous repositionne la div en direct.</p>
<p>Alors le gros défaut de cette version pour le moment c&#8217;est qu&#8217;on ne peut pas cliquer sur les liens de la page même ou sélectionner un texte à cause de la div &#8216;note&#8217; que j&#8217;ai mise pour indiquer quelle touche enfoncer. Mais il y a possibilité d&#8217;éviter ça, il suffit de ne pas mettre de note et d&#8217;indiquer la façon de procéder autrement.</p>
<p>J&#8217;espère que cet article vous inspirera, amusez-vous bien.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://web.virtuousquare.fr/?feed=rss2&amp;p=283</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Animez des sprites avec CSS et jQuery et changez leurs états avec le clavier</title>
		<link>http://web.virtuousquare.fr/?p=269</link>
		<comments>http://web.virtuousquare.fr/?p=269#comments</comments>
		<pubDate>Sun, 11 Apr 2010 18:23:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://web.virtuousquare.fr/?p=269</guid>
		<description><![CDATA[
Suite de l&#8217;article précédent pour une navigation web originale rappelant un jeu-vidéo. Cette fois nous allons voir les animations de sprites avec jQuery.

L&#8217;utilisation de gif est dure à gérée en cas de modification de l&#8217;animation, la qualité se fait au prix d&#8217;un poids excessif. La solution alternative est donc le sprite &#8230;euh non pas la [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://web.virtuousquare.fr/wp-content/uploads/2010/04/bande1.png" alt="" title="bande" width="709" height="168" /></p>
<p>Suite de l&#8217;article précédent pour une navigation web originale rappelant un jeu-vidéo. Cette fois nous allons voir les animations de sprites avec jQuery.</p>
<div class="hide_content">
<p>L&#8217;utilisation de gif est dure à gérée en cas de modification de l&#8217;animation, la qualité se fait au prix d&#8217;un poids excessif. La solution alternative est donc le sprite &#8230;euh non pas la boisson&#8230; Pour ceux qui ne connaissent pas, c&#8217;est une planche d&#8217;images sur laquelle on trouve tous les états d&#8217;une animation.</p>
<p>Dans notre exemple l&#8217;animation du personnage si on clique sur la droite ou la gauche, ce qui fait 4 animations du personnage en tout. Voyez plutôt :</p>
<p><a href="http://web.virtuousquare.fr/wp-content/themes/default/tuto/stage/stage1.htm" target="_blank">La démonstration</a></p>
<p>Comme dans l&#8217;article précédent, la structure HTML est minimaliste :</p>
<pre class="brush: xml;">
<div id="container">
<div id="sol"></div>
<div id="perso"></div>
</div>
</pre>
<p>Et le CSS également est très light :</p>
<pre class="brush: css;">
body {
	margin:0;
}
#container {
	position:absolute;
	width:1000px;
	height:300px;
	background:#92d2ed;
}
#sol {
	position:absolute;
	width:2000px;
	height:36px;
	bottom:0;
	background:url(../images/sol.png) repeat-x;
	z-index:50;
}
#perso {
	position:absolute;
	width:61px;
	height:73px;
	background:url(../images/nu.png) -21px -128px no-repeat;
	top:195px;
	left:460px;
	z-index:40;
}
</pre>
<p>Et voici le javascript qui anime le personnage et permet de détecter le pressage de touches.<br />
Nous utilisons le plugin de background position et le <a href="http://jquery.offput.ca/every/" target="_blank">plugin timers</a>, qui permet de remplacer les setTimeOut et setInterval.</p>
<pre class="brush: javascript;">
$(document).ready(function() {
	jQuery.fn.arretDrt = function() {
		$(this).oneTime(200,function() {
			$(this).css({backgroundPosition:'-21px -128px'});
		}).oneTime(400,function() {
			$(this).css({backgroundPosition:'-121px -128px'});
		}).oneTime(600,function() {
			$(this).css({backgroundPosition:'-221px -128px'});
		}).oneTime(800,function() {
			$(this).css({backgroundPosition:'-121px -128px'});
		});
	};
	jQuery.fn.mouvArretDrt = function(){
		$(this).arretDrt();
		$(this).everyTime(800,function(){
			$(this).arretDrt();
		});
	}
	jQuery.fn.arretGch = function() {
		$(this).oneTime(200,function() {
			$(this).css({backgroundPosition:'-23px -28px'});
		}).oneTime(400,function() {
			$(this).css({backgroundPosition:'-123px -28px'});
		}).oneTime(600,function() {
			$(this).css({backgroundPosition:'-223px -28px'});
		}).oneTime(800,function() {
			$(this).css({backgroundPosition:'-123px -28px'});
		});
	};
	jQuery.fn.mouvArretGch = function(){
		$(this).arretGch();
		$(this).everyTime(800,function(){
			$(this).arretGch();
		});
	}
	jQuery.fn.marcheDrt = function() {
		$(this).oneTime(200,function() {
			$(this).css({backgroundPosition:'-18px -328px'});
		}).oneTime(400,function() {
			$(this).css({backgroundPosition:'-118px -328px'});
		}).oneTime(600,function() {
			$(this).css({backgroundPosition:'-218px -328px'});
		}).oneTime(800,function() {
			$(this).css({backgroundPosition:'-318px -328px'});
		});
	};
	jQuery.fn.mouvMarcheDrt = function(){
		$(this).marcheDrt();
		$(this).everyTime(800,function(){
			$(this).marcheDrt();
		});
	}
	jQuery.fn.marcheGch = function() {
		$(this).oneTime(200,function() {
			$(this).css({backgroundPosition:'-23px -228px'});
		}).oneTime(400,function() {
			$(this).css({backgroundPosition:'-123px -228px'});
		}).oneTime(600,function() {
			$(this).css({backgroundPosition:'-223px -228px'});
		}).oneTime(800,function() {
			$(this).css({backgroundPosition:'-323px -228px'});
		});
	};
	jQuery.fn.mouvMarcheGch = function(){
		$(this).marcheGch();
		$(this).everyTime(800,function(){
			$(this).marcheGch();
		});
	}
	$("#perso").mouvArretDrt();

	var arret = 0;

	$(window).keydown(function(event) {
		if (event.keyCode == '39') {
			if (arret == 0) {
				arret = 1;
				$("#perso").stopTime().removeClass('gch').mouvMarcheDrt();
			}
		}
		if (event.keyCode == '37') {
			if (arret == 0) {
				arret = 1;
				$("#perso").stopTime().addClass('gch').mouvMarcheGch();
			}
		}
	});
	$(window).keyup(function(event) {
		if (arret == 1) {
			arret = 0;
			$("#perso").stopTime().mouvArretDrt();
			$(".gch").stopTime().mouvArretGch();
		}
	});
});
</pre>
<p>J&#8217;ai posté cet article rapidement (je n&#8217;ai même pas fini d&#8217;habiller le personnage, qui utilise la base des personnages de Maple Story), j&#8217;éditerai pour plus de détails, et bientôt la suite pour aller plus loin dans la navigation façon jeu-vidéo.<br /> Merci à Fabien pour les flags.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://web.virtuousquare.fr/?feed=rss2&amp;p=269</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
