
<?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>Waanser &#187; user-frendly</title>
	<atom:link href="http://www.waanser.com/tag/user-frendly/feed" rel="self" type="application/rss+xml" />
	<link>http://www.waanser.com</link>
	<description>Un blog utilisant WordPress</description>
	<lastBuildDate>Wed, 07 Jul 2010 21:54:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>script.aculo.us. redimension fenêtre</title>
		<link>http://www.waanser.com/javascript/general-js/1228-scriptaculous-redimension-fenetre.html</link>
		<comments>http://www.waanser.com/javascript/general-js/1228-scriptaculous-redimension-fenetre.html#comments</comments>
		<pubDate>Wed, 25 Mar 2009 14:27:53 +0000</pubDate>
		<dc:creator>roul</dc:creator>
				<category><![CDATA[Général]]></category>
		<category><![CDATA[user-frendly]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=1228</guid>
		<description><![CDATA[Redimensionner une fenêtre donne toujours un peu effet user-frendly sympa pour un site web. Nous allons voir pas à pas comment l&#8217;intégrer à vos pages (avec une petite aide de script.aculo.us). Mise en place des divs Cette étape c&#8217;est la plus simple. Dans le head, il faut juste charger les librairies script.aculo.us. &#60;script src=&#34;./lib/prototype.js&#34; type=&#34;text/javascript&#34;&#62;&#60;/script&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Redimensionner une fenêtre donne toujours un peu effet user-frendly sympa pour un site web.<br />
Nous allons voir pas à pas comment l&#8217;intégrer à vos pages (avec une petite aide de script.aculo.us).<br />
<span id="more-1228"></span></p>
<h2>Mise en place des divs</h2>
<p>Cette étape c&#8217;est la plus simple. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p>Dans le head, il faut juste charger les librairies script.aculo.us.</p>
<pre class="brush: javascript">
&lt;script src=&quot;./lib/prototype.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;./src/effects.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;./src/dragdrop.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>On va ajouter nos fonctions sympa pour l&#8217;effet drag and drop.</p>
<pre class="brush: javascript">
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;

	function cache ( id ) {
		id.style.border = &#039;1px dashed #000000&#039;;
	}

	function affiche ( id ) {
		id.style.border = &#039;1px solid #000000&#039;;
	}
&lt;/script&gt;
</pre>
<p>Là on prépare notre CSS :</p>
<pre class="brush: css">
&lt;style type=&quot;text/css&quot;&gt;
	#boiteDimToMove {
		border: 1px solid #000000;
		width: 120px;
		height: 120px;
		float: left;
		background:#FF00FF;
	}

	#boiteDim {
		border: 1px solid #000000;
		width: 10px;
		height: 10px;
		margin-left: 109px;
		margin-top: 109px;
		float: left;
		background:#FF0000;
	}
&lt;/style&gt;
</pre>
<p>Maintenant on créer nos divs (dans le body)</p>
<pre class="brush: html">
&lt;div id=&quot;boiteDimToMove&quot; onmouseup=&quot;affiche(this)&quot; onmousedown=&quot;cache(this)&quot;&gt;
	&lt;div id=&quot;boiteDim&quot; onmouseup=&quot;affiche(this)&quot; onmousedown=&quot;cache(this)&quot; &gt;
	&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Et on affecte à nos div la fonction draggable (sinon sans ça, nous pourrions pas déplacer nos divs).</p>
<pre class="brush: javascript">
&lt;script type=&quot;text/javascript&quot;&gt;
	new Draggable(&#039;boiteDim&#039;);
	new Draggable(&#039;boiteDimToMove&#039;);
&lt;/script&gt;
</pre>
<p>Voila ce que ça va donner au final : <a href='http://media.waanser.com/2009/03/div1.html'>sur ce lien</a></p>
<p>Bon tout est prêt, on va pouvoir s&#8217;attaquer au plu dur :p</p>
<hr/>
<h2>Agrandir une fenêtre</h2>
<p>Dans cette exemple c&#8217;est la petite div rouge qui va définir la taille de la plus grosse.</p>
<p><strong>Mais comment on va procéder roul ?</strong></p>
<p>C&#8217;est pas compliqué, quand l&#8217;utilisateur va déplacer la div rouge, au moment de relâcher le bouton de la souris, le javascript va récupérer la position de la souris et va élargir la fenêtre (le div rose) jusqu&#8217;à cette position.</p>
<p>En traduction html ce la va donné :</p>
<pre class="brush: html">
	&lt;div id=&quot;boiteDimToMove&quot; onmouseup=&quot;affiche(this)&quot; onmousedown=&quot;cache(this)&quot;&gt;
		&lt;div id=&quot;boiteDim&quot; onmouseup=&quot;UpdateDiv(event,this)&quot; onmousedown=&quot;cache(this)&quot; &gt;
		&lt;/div&gt;
	&lt;/div&gt;
</pre>
<hr/>
envent : c&#8217;est les évènements utilisateur comme des clics de souris ou des entrées clavier.<br />
Nous, ce qui va nous intéresser, c&#8217;est la position du curseur.</p>
<pre class="brush: javascript">
function UpdateDiv(e,boiteDim){
    var iPosY = e.pageY; // position ordonnée du curseur
    var iPosX = e.pageX;  // position abscisse du curseur
    alert(&#039;iPosY : &#039;+iPosY+&quot;\n&quot;+&#039;iPosX : &#039;+iPosX)
    affiche(boiteDim);
}
</pre>
<p>Voila ce que cela doit afficher :</p>
<p><a href="http://media.waanser.com/2009/03/script-aculo-us.png"><img src="http://media.waanser.com/2009/03/script-aculo-us.png" alt="script-aculo-us" title="script-aculo-us" class="alignnone size-full wp-image-1233" /></a></p>
<p>Le code source est <a href='http://media.waanser.com/2009/03/div2.html'>ici</a></p>
<hr/>
<strong><u>dimessionner notre div</u></strong></p>
<p>Pour modifier la taille de la fenêtre, on va toucher au style. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
pour récupérer le style en javascript il faut utiliser :<br />
<strong>document.getElementById(ID).style</strong></p>
<p>Après pour définir les attributs, il faut tout simplement utiliser le <strong>.</strong><br />
<strong>document.getElementById(&#8216;boite&#8217;).style.width</strong> correspond à la propriété <strong>width </strong>du style du div <em>boite</em></p>
<p>Voila ce que la va donner :</p>
<pre class="brush: javascript">
function UpdateDiv(e,boiteDim){
    var iPosY = e.pageY; // position ordonnée du curseur
    var iPosX = e.pageX;  // position abscisse du curseur
    var oStyleToMove = document.getElementById(boiteDim.id+&#039;ToMove&#039;).style;
    // oStyleToMove le style de la div boiteDimToMove

    oStyleToMove.width = iPosX; // on élargi la div
    oStyleToMove.height = iPosY; // on allonge la div
    cache(boiteDim);
}
</pre>
<p>Le code source est <a href='http://media.waanser.com/2009/03/div3.html'>ici</a></p>
<hr/>
<strong><u>Ça fonctionne seulement si on bouge pas la fenêtre (div rose) !</u></strong></p>
<p>Oui en effet ce script ne prend pas en compte de l&#8217;emplacement de la fenêtre, pour son redimensionnement.<br />
Nous allons corriger cela. Pour connaitre la dimension de la fenêtre nous allons soustraire la position de la fenêtre à celle du curseur. (pas besoin d&#8217;être fort en math ^^)</p>
<p>Pour récupérer la position de la fenêtre nous allons concentrer sur son style (plus précisément à la propriété top et left).<br />
<strong>oStyleToMove.top</strong><br />
<strong>oStyleToMove.left</strong></p>
<p>on va afficher ces variables :</p>
<pre class="brush: javascript">
alert(&#039;Y : &#039;+oStyleToMove.top+&quot;\n X : &quot;+oStyleToMove.left);
</pre>
<div id="attachment_1241" class="wp-caption alignnone" style="width: 336px"><a href="http://media.waanser.com/2009/03/soustr.png"><img src="http://media.waanser.com/2009/03/soustr.png" alt="soustraction" title="soustr" width="326" height="125" class="size-full wp-image-1241" /></a><p class="wp-caption-text">soustraction</p></div>
<hr/>
On voit que le nombre est du type <em>XX</em>px. On ne peut pas faire de calcul avec ce type de chaine.<br />
On va donc supprimer ces px avec l&#8217;aide d&#8217;une expression régulière.</p>
<pre class="brush: javascript">
    // on enlève le px au coordonnée de la fenêtre
    var oExp =new RegExp(&quot;px&quot;, &quot;g&quot;);
    var sTop = oStyleToMove.top.replace(oExp,&#039;&#039;);
    var sLeft = oStyleToMove.left.replace(oExp,&#039;&#039;);
</pre>
<p>On a plus qu&#8217;à faire la soustraction :</p>
<pre class="brush: javascript">
    var iPosY = e.pageY - sTop; // position ordonnée de la fenêtre
    var iPosX = e.pageX - sLeft;  // position abscisse de la fenêtre
</pre>
<p>Le code source :<br />
<a href='http://media.waanser.com/2009/03/div4.html'>c&#8217;est là</a></p>
<hr/>
<p>Et voila, maintenant nos utilisateurs peuvent redimensionner leur fenêtre en quelque clics <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Pour aller plus loin</h2>
<p>Je me suis aperçus que le petit cadre rouge n&#8217;est pas exactement coller en bas à droite.</p>
<p><a href="http://media.waanser.com/2009/03/soustr1.png"><img src="http://media.waanser.com/2009/03/soustr1.png" alt="redimensionnement fenêtre" title="soustr1" class="alignnone size-full wp-image-1246" /></a></p>
<p>Pour réajuster le tir, on va mettre à zero le style left et top (qui est utilisé par script.aculo.us.)</p>
<p>voici la correction :</p>
<pre class="brush: javascript">
 var oStyle = boiteDim.style;
    oStyle.marginLeft=iPosX- boiteDim.offsetHeight;
    oStyle.marginTop=iPosY- boiteDim.offsetWidth;
    oStyle.left=0;
    oStyle.top=0
</pre>
<p>Ce qui va donner au final <a href='http://media.waanser.com/2009/03/div5.html'>ce code</a>.</p>
<hr/>
<h2>Compatibilité avec Internet Explorer</h2>
<p>Internet Explorer nous facile vraiment pas le vie. nous allons voir comment rendre ce script compatible avec<br />
IE.</p>
<p>Pour récupérer la position du curseur cela change :</p>
<pre class="brush: javascript">
var Xposition = (navigator.appName.substring(0,3) == &quot;Net&quot;) ? e.pageX : e.clientX ;
var Yposition = (navigator.appName.substring(0,3) == &quot;Net&quot;) ? e.pageY : e.clientY ;
</pre>
<p>et pour la position de la petite div</p>
<pre class="brush: javascript">
  if (navigator.appName.substring(0,3) == &quot;Net&quot;)
    {
    	oStyle.marginLeft=iPosX - boiteDim.offsetHeight;
    }else
    {
    	oStyle.marginLeft=iPosX;
    }
 </pre>
<p>Voila la version <a href='http://media.waanser.com/2009/03/div6.html'>final</a> compatible Internet Explorer</p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/javascript/general-js/1228-scriptaculous-redimension-fenetre.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

