<?xml 
version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://arts-numeriques.codedrops.net/spip.php?page=backend.xslt" ?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>Arts num&#233;riques</title>
	<link>https://arts-numeriques.codedrops.net/</link>
	<description>artsnumeriques est le support des cours de St&#233;phane Noel, professeur &#224; l'&#233;cole de recherche graphique.</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="http://arts-numeriques.codedrops.net/spip.php?id_rubrique=46&amp;page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>Jouer un sample en javascript pur</title>
		<link>http://arts-numeriques.codedrops.net/Jouer-un-sample-en-javascript-pur</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/Jouer-un-sample-en-javascript-pur</guid>
		<dc:date>2020-12-13T11:10:17Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>
&lt;p&gt;Si coder un lecteur audio complet, avec bouton &#034;play&#034;, &#034;stop&#034;, l'affichage du temps et la possibilit&#233; de naviguer dans le morceau est complexe, d&#233;clencher un son court peut &#234;tre r&#233;alis&#233; avec quelques lignes de code. &lt;br class='autobr' /&gt; Sans jQuery JQuery est une librairie puissante et assez compl&#232;te, mais s'il s'agit de produire des scripts simples, on a parfois l'impression de prendre un bazooka pour tuer des mouches. Un script simple comme celui qui suit peut &#234;tre fait de mani&#232;re rapide, en javascript (&#8230;)&lt;/p&gt;


-
&lt;a href="http://arts-numeriques.codedrops.net/-Lecteurs-audio-et-video-" rel="directory"&gt;Lecteurs audio et vid&#233;o&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L150xH60/arton641-4406d.png?1781356594' class='spip_logo spip_logo_right' width='150' height='60' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Si coder un lecteur audio complet, avec bouton &#034;play&#034;, &#034;stop&#034;, l'affichage du temps et la possibilit&#233; de naviguer dans le morceau est complexe, d&#233;clencher un son court peut &#234;tre r&#233;alis&#233; avec quelques lignes de code.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Sans jQuery&lt;/h2&gt;
&lt;p&gt;JQuery est une librairie puissante et assez compl&#232;te, mais s'il s'agit de produire des scripts simples, on a parfois l'impression de prendre un bazooka pour tuer des mouches. Un script simple comme celui qui suit peut &#234;tre fait de mani&#232;re rapide, en javascript &#034;pur&#034;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Le html&lt;/h2&gt;
&lt;p&gt;Vous devez disposer d'un son court pour r&#233;aliser cet exercice. J'ai &#233;t&#233; en chercher un sur &lt;a href=&#034;http://bbcsfx.acropolis.org.uk/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;la biblioth&#232;que de la BBC,&lt;/a&gt; en affichant les sons par dur&#233;e.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='javascript spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;audio controls id=&#034;bip&#034;&gt; &lt;source src=&#034;bip.wav&#034; type=&#034;audio/wav&#034;&gt; &lt;/audio&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;l'attribut &#034;controls&#034; dans le tag audio est ce qui fait apparaitre le lecteur. Pour en savoir plus &#224; ce sujet, lire &lt;a href='http://arts-numeriques.codedrops.net/Lecteur-audio-HTML-5' class=&#034;spip_in&#034;&gt;l'article sur la balise audio&lt;/a&gt; sur ce site.&lt;br class='autobr' /&gt;
En appuyant sur le bouton play, on peut tester le son, v&#233;rifier que tout se passe bien &#224; ce stade.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;D&#233;clencher avec javascript&lt;/h2&gt;
&lt;p&gt;Nous allons maintenant cr&#233;er un bouton, qui devra d&#233;clencher le son. Nous avons ajout&#233; un id au tag audio pour facilement y acc&#233;der.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='javascript spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;audio controls id=&#034;bip&#034;&gt; &lt;source src=&#034;bip.wav&#034; type=&#034;audio/wav&#034;&gt; &lt;/audio&gt; &lt;bouton onclick=&#034;joueson()&#034;&gt;Jouer le son&lt;/bouton&gt; &lt;script&gt; function joueson(){ // atteindre l'&#233;l&#233;ment par son id var leson=document.getElementById(&#034;bip&#034;); // jouer le son leson.play(); } &lt;/script&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le probl&#232;me de ce code est qu'une fois le son jou&#233;, il ne se passe plus rien quand on clique &#224; nouveau sur le bouton. La t&#234;te de lecture du son ne revient pas automatiquement au d&#233;but de celui-ci. On va donc ajouter un ligne qui met le son au d&#233;but du fichier chaque fois que le bouton est cliqu&#233;.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='javascript spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;audio controls id=&#034;bip&#034;&gt; &lt;source src=&#034;bip.wav&#034; type=&#034;audio/wav&#034;&gt; &lt;/audio&gt; &lt;bouton onclick=&#034;joueson()&#034;&gt;Jouer le son&lt;/bouton&gt; &lt;script&gt; function joueson(){ // atteindre l'&#233;l&#233;ment par son id var leson=document.getElementById(&#034;bip&#034;); // remettre le son au d&#233;but leson.currentTime=0; // jouer le son leson.play(); } &lt;/script&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et voil&#224; . Il suffit de cacher le lecteur en retirant l'attribut &#034;controls&#034; et le lecteur disparait, laissant seul le bouton.&lt;/p&gt;
&lt;p&gt;Une version du code pour plusieurs boutons &lt;br class='autobr' /&gt;
Il est possible de faire facilement une version de ce code qui permettent de d&#233;clencher diff&#233;rentes balises audio &#224; partir de la m&#234;me fonction.&lt;/p&gt;
&lt;p&gt;Il suffit de transmettre l'id du tag audio que l'on veut d&#233;clencher dans l'appel de la fonction, comme ceci :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='javascript spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;audio controls id=&#034;bip&#034;&gt; &lt;source src=&#034;bip.wav&#034; type=&#034;audio/wav&#034;&gt; &lt;/audio&gt; &lt;audio controls id=&#034;honk&#034;&gt; &lt;source src=&#034;honk.wav&#034; type=&#034;audio/wav&#034;&gt; &lt;/audio&gt; &lt;bouton onclick=&#034;joueson('bip')&#034;&gt;Biiip&lt;/bouton&gt; &lt;bouton onclick=&#034;joueson('honk')&#034;&gt;Hooonk&lt;/bouton&gt; &lt;script&gt; function joueson(tag){ // atteindre l'&#233;l&#233;ment par son id var leson=document.getElementById(tag); // remettre le son au d&#233;but leson.currentTime=0; // jouer le son leson.play(); } &lt;/script&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Associer l'apparition d'un bloc dans la page &#195; une action</title>
		<link>http://arts-numeriques.codedrops.net/Associer-l-apparition-d-un-bloc-dans-la-page-a-une-action</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/Associer-l-apparition-d-un-bloc-dans-la-page-a-une-action</guid>
		<dc:date>2020-10-07T10:55:20Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>
&lt;p&gt;Il existe des plugin pour jquery, le plus connu &#195;&#169;tant waypoints, qui permettent de d&#195;&#169;tecter si lors d'un scroll, un &#195;&#169;l&#195;&#169;ment apparait dans la page. Voici un code relativement court de d&#195;&#169;monstration de cette fonction. &lt;br class='autobr' /&gt; Comparer le scrollTop() Il s'agit de comparer le nombre de pixels scroll&#195;&#169; depuis le haut de la page, qui est un chiffre, avec l'endroit dans la page o&#195;&#185; se trouve tout les blocs associ&#195;&#169; &#195; une classe (ici .truc). En comparant position et la taille verticales du bloc avec (&#8230;)&lt;/p&gt;


-
&lt;a href="http://arts-numeriques.codedrops.net/-JQuery-79-" rel="directory"&gt;JQuery&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L150xH101/arton622-e4efa.jpg?1781356594' class='spip_logo spip_logo_right' width='150' height='101' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Il existe des plugin pour jquery, le plus connu &#195;&#169;tant &lt;a href=&#034;http://imakewebthings.com/waypoints/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;waypoints&lt;/a&gt;, qui permettent de d&#195;&#169;tecter si lors d'un scroll, un &#195;&#169;l&#195;&#169;ment apparait dans la page. Voici un code relativement court de d&#195;&#169;monstration de cette fonction.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Comparer le scrollTop()&lt;/h2&gt;
&lt;p&gt;Il s'agit de comparer le nombre de pixels scroll&#195;&#169; depuis le haut de la page, qui est un chiffre, avec l'endroit dans la page o&#195;&#185; se trouve tout les blocs associ&#195;&#169; &#195; une classe (ici &lt;i&gt;.truc&lt;/i&gt;). En comparant position et la taille verticales du bloc avec ce chiffre, on peut d&#195;&#169;terminer si le bloc est actuellement dans l'espace de la fen&#195;&#170;tre du navigateur. Si c'est le cas, on lui ajouter la classe &lt;i&gt;.inview&lt;/i&gt;, sinon on la retire.&lt;br class='autobr' /&gt;
En associant une transition &#195; cette classe, on peut obtenir diff&#195;&#169;rents effets avec l'opacit&#195;&#169; (opacity), le d&#195;&#169;placement (translate), l'agrandissement (scale), la rotation (rotate), etc. Et jouer sur les combinaisons de ces effets.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Modifier le script&lt;/h2&gt;
&lt;p&gt;Ce code enl&#195;&#168;ve la classe &lt;i&gt;.inview&lt;/i&gt; lorsque l'&#195;&#169;l&#195;&#169;ment disparait de la page, mais il est possible de ne pas supprimer cette classe, rendant l'apparition permanente.&lt;/p&gt;
&lt;p&gt;Il est aussi possible de rendre l'apparition plus tardive ou rapide en jouant sur le calcul : l'&#195;&#169;l&#195;&#169;ment peut alors apparaitre alors qu'il est au milieu de la fen&#195;&#170;tre, ou au contraire, commencer sa transition alors qu'il n'est pas encore visible.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Le code&lt;/h2&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;!-- dupliquer ces blocs pour qu'un scroll soit possible --&gt; &lt;article class=&#034;truc slide-right&#034;&gt;Un truc&lt;/article&gt; &lt;article class=&#034;truc slide-left&#034;&gt;Un truc&lt;/article&gt; &lt;article class=&#034;truc appears&#034;&gt;Un truc&lt;/article&gt; &lt;article class=&#034;truc appears&#034;&gt;Un truc&lt;/article&gt; &lt;article class=&#034;truc appears&#034;&gt;Un truc&lt;/article&gt; &lt;article class=&#034;truc appears&#034;&gt;Un truc&lt;/article&gt; &lt;article class=&#034;truc appears&#034;&gt;Un truc&lt;/article&gt; &lt;script&gt; var $animation_elements = $('.truc'); var $window = $(window); function check_if_in_view() { var window_height = $window.height(); var window_top_position = $window.scrollTop(); var window_bottom_position = (window_top_position + window_height); $.each($animation_elements, function() { var $element = $(this); var element_height = $element.outerHeight(); var element_top_position = $element.offset().top; var element_bottom_position = (element_top_position + element_height); //check to see if this current container is within viewport if ((element_bottom_position &gt;= window_top_position) &amp;&amp; (element_top_position &lt;= window_bottom_position)) { $element.addClass('in-view'); } else { // enlever ceci pour un effet permanent $element.removeClass('in-view'); } }); } $window.on('scroll resize', check_if_in_view); &lt;/script&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Un exemple de css pour accompagner ce code :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;style&gt; article.truc { width:300px; height:100px; padding:20px; background-color:aquamarine; border-radius: 10px; margin:20px auto; transition-property: all; transition-duration: 1s; transition-timing-function: linear; text-align: center; line-height:100px; } .truc.slide-left { transform: translate(-1000px,0); } .truc.slide-left.in-view { transform: translate(0,0); } .truc.slide-right { transform: translate(1000px,0); } .truc.slide-right.in-view { transform: translate(0,0); &lt;/style&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Un lecteur en bas de page</title>
		<link>http://arts-numeriques.codedrops.net/Un-lecteur-en-bas-de-page</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/Un-lecteur-en-bas-de-page</guid>
		<dc:date>2020-03-03T00:40:34Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>
&lt;p&gt;Ce lecteur occupe le bas de la page, dans une barre blanche occupant toute la largeur. &lt;br class='autobr' /&gt; Le code complet est en pi&#232;ce jointe. Le code est similaire au lecteur &#034;Un lecteur audio cod&#233; avec jquery&#034;, et utilise jQuery. &lt;br class='autobr' /&gt;
Pour utiliser le code, il faut disposer de jQuery, et charger les deux fichiers de bases : un fichier javascript et un fichier CSS : &lt;script src=&#034;lecteur_son/javascript.js&#034;&gt;&lt;/script&gt; &lt;link rel=&#034;stylesheet&#034; (&#8230;)&lt;/p&gt;


-
&lt;a href="http://arts-numeriques.codedrops.net/-Lecteurs-audio-et-video-" rel="directory"&gt;Lecteurs audio et vid&#233;o&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L150xH79/arton583-ce00b.jpg?1781356594' class='spip_logo spip_logo_right' width='150' height='79' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Ce lecteur occupe le bas de la page, dans une barre blanche occupant toute la largeur.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Le code complet est en pi&#232;ce jointe. Le code est similaire au lecteur &#034;&lt;a href='http://arts-numeriques.codedrops.net/Demo-un-lecteur-audio-code-avec-jquery' class=&#034;spip_in&#034;&gt;Un lecteur audio cod&#233; avec jquery&lt;/a&gt;&#034;, et utilise jQuery.&lt;/p&gt;
&lt;p&gt;Pour utiliser le code, il faut disposer de jQuery, et charger les deux fichiers de bases : un fichier javascript et un fichier CSS :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; &lt;script src=&#034;lecteur_son/javascript.js&#034;&gt;&lt;/script&gt; &lt;link rel=&#034;stylesheet&#034; href=&#034;lecteur_son/lecteur.css&#034;&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Puis cr&#233;er le tag audio en lui donnant la classe .lecteur-son :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; &lt;audio class=&#034;lecteur-son&#034; controls data-titre=&#034;Le titre&#034; data-auteur=&#034;L'auteur&#034;&gt; &lt;source src=&#034;lefichierson.mp3&#034; type=&#034;audio/mp3&#034;&gt; &lt;/audio&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Les attributs data-titre et data-auteur permettent d'afficher dans le lecteur les infos de titre du morceau et de l'auteur.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_1005 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH262/lecteur-son-56df0.jpg?1781356594' width='500' height='262' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Les CSS restent modifiables pour personnaliser le lecteur.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://arts-numeriques.codedrops.net/IMG/zip/lecteur_son_2020.zip" length="466665" type="application/zip" />
		

	</item>
<item xml:lang="fr">
		<title>Jouer un sample sur clic avec jquery</title>
		<link>http://arts-numeriques.codedrops.net/Jouer-un-sample-sur-clic-avec-jquery</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/Jouer-un-sample-sur-clic-avec-jquery</guid>
		<dc:date>2019-12-07T14:43:29Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>
&lt;p&gt;Un script simple, qui vide &#224; activer un son sur base d'un clic avec jquery. Le html &lt;br class='autobr' /&gt;
Le code est compos&#233; d'un &#233;l&#233;ment comportant la class .jouerson, avec un &#233;l&#233;ment visible (ici un simple texte), et un tag audio avec le lien correct vers un son court. Le tag audio n'a pas d'attribut &#034;controls&#034; donc il est invisible, ce qui nous convient.
&lt;br class='autobr' /&gt;
&lt;div class=&#034;jouerson&#034;&gt; Play me ! &lt;audio&gt; &lt;source src=&#034;beat.wav&#034; type=&#034;audio/mp3&#034;&gt; &lt;/audio&gt; (&#8230;)&lt;/p&gt;


-
&lt;a href="http://arts-numeriques.codedrops.net/-Lecteurs-audio-et-video-" rel="directory"&gt;Lecteurs audio et vid&#233;o&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L150xH95/arton568-e43cf.jpg?1781356594' class='spip_logo spip_logo_right' width='150' height='95' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Un script simple, qui vide &#224; activer un son sur base d'un clic avec jquery.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Le html&lt;/h2&gt;
&lt;p&gt;Le code est compos&#233; d'un &#233;l&#233;ment comportant la class .jouerson, avec un &#233;l&#233;ment visible (ici un simple texte), et un tag audio avec le lien correct vers un son court. Le tag audio n'a pas d'attribut &#034;controls&#034; donc il est invisible, ce qui nous convient.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='7' class='spip_cadre spip_cadre_block' dir='ltr'&gt;&lt;div class=&#034;jouerson&#034;&gt; Play me ! &lt;audio&gt; &lt;source src=&#034;beat.wav&#034; type=&#034;audio/mp3&#034;&gt; &lt;/audio&gt; &lt;/div&gt;&lt;/textarea&gt;&lt;h2 class=&#034;spip&#034;&gt;Le javascript&lt;/h2&gt;
&lt;p&gt;Le javascript est &#233;crit en jquery. Il faut &#233;videmment charger Jquery avant d'afficher ce script. &lt;br class='autobr' /&gt;
Le script cherche &#224; l'int&#233;rieur de l'&#233;l&#233;ment s&#233;lectionn&#233; par la classe un tag audio, et s'il le trouve, le remet &#224; z&#233;ro (au cas o&#249; il serait d&#233;j&#224; en cours de lecture) et le joue.&lt;br class='autobr' /&gt;
On peut utiliser plusieurs &#233;l&#233;ments avec cette m&#234;me classe dans la page.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='javascript spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;$(&#034;.jouerson&#034;).click(function(){ var a=$(this).find(&#034;audio&#034;).get(0); // trouver le tag audio a.currentTime=0; // remettre au d&#233;but du son a.play(); // jouer return false; });&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Un lecteur audio &#034;vanilla&#034; (sans librairie)</title>
		<link>http://arts-numeriques.codedrops.net/Un-lecteur-audio-sans-jquery</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/Un-lecteur-audio-sans-jquery</guid>
		<dc:date>2019-02-26T12:20:18Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>
&lt;p&gt;Ce script utilise des fonctions natives de javascript pour cr&#233;er un lecteur audio. Usage &lt;br class='autobr' /&gt;
Le code est plac&#233; dans le fichier javascript.js. Ce fichier doit &#234;tre charg&#233; &#224; la fin de la page, apr&#232;s tout le code html. &lt;br class='autobr' /&gt;
Pour activer le lecteur, il est n&#233;cessaire de pr&#233;parer le html avec cette structure : &lt;div class=&#034;lecteur&#034;&gt; &lt;audio controls&gt; &lt;source src=&#034;groove.mp3&#034; type=&#034;audio/mp3&#034;&gt; Your browser does not support the (&#8230;)&lt;/p&gt;


-
&lt;a href="http://arts-numeriques.codedrops.net/-Lecteurs-audio-et-video-" rel="directory"&gt;Lecteurs audio et vid&#233;o&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L150xH59/arton543-5f1e1.jpg?1781356595' class='spip_logo spip_logo_right' width='150' height='59' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Ce script utilise des fonctions natives de javascript pour cr&#233;er un lecteur audio.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Usage&lt;/h2&gt;
&lt;p&gt;Le code est plac&#233; dans le fichier javascript.js. Ce fichier doit &#234;tre charg&#233; &#224; la fin de la page, apr&#232;s tout le code html.&lt;/p&gt;
&lt;p&gt;Pour activer le lecteur, il est n&#233;cessaire de pr&#233;parer le html avec cette structure :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;div class=&#034;lecteur&#034;&gt; &lt;audio controls&gt; &lt;source src=&#034;groove.mp3&#034; type=&#034;audio/mp3&#034;&gt; Your browser does not support the audio element. &lt;/audio&gt; &lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le script d&#233;tecte la classe &#034;lecteur&#034; et cr&#233;e des &#233;l&#233;ments html suppl&#233;mentaires &#224; l'int&#233;rieur de celui-ci, dont les boutons de lecture.&lt;/p&gt;
&lt;p&gt;Voici sa structure :&lt;br class='autobr' /&gt;
&lt;span class='spip_document_919 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH388/structure-audio-d41ff.jpg?1781356595' width='500' height='388' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;CSS&lt;/h2&gt;
&lt;p&gt;Le fichier css est volontairement vide, et comporte juste les classes principales associ&#233;es au lecteur.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Plusieurs sons&lt;/h2&gt;
&lt;p&gt;Le code supporte plusieurs lecteurs. Ils auront tous le m&#234;me comportement css de base, &#224; vous de les dissocier en utilisant d'autres id et classes associ&#233; &#224; l'&#233;l&#233;ment &#034;lecteur&#034;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://arts-numeriques.codedrops.net/IMG/zip/player_audio_no_jquery.zip" length="435332" type="application/zip" />
		

	</item>
<item xml:lang="fr">
		<title>Qu'est-ce que Javascript ?</title>
		<link>http://arts-numeriques.codedrops.net/Javascript-522</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/Javascript-522</guid>
		<dc:date>2018-12-12T11:46:34Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>&lt;p&gt;Qu'est ce que le langage javascript ?&lt;/p&gt;

-
&lt;a href="http://arts-numeriques.codedrops.net/-Les-bases-" rel="directory"&gt;Les bases&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Bref &#195;&#169;claircissement sur ce langage, diff&#195;&#169;rent dans sa nature du html et de css, qu'il compl&#195;&#168;te.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Javascript est un langage de programmation&lt;/h2&gt;
&lt;p&gt;Contrairement &#195; HTML qui est un langage de &lt;i&gt;description&lt;/i&gt;, Javascript est un langage de programmation, ce qui signifie que l'on donne des ordres. Le langage Javascript s'adresse au &lt;i&gt;moteur javascript&lt;/i&gt; du navigateur web, la plupart du temps. &lt;br class='autobr' /&gt;
Les instructions &#195;&#169;crites en javascript doivent respecter des r&#195;&#168;gles de syntaxe pr&#195;&#169;cises, sans quoi le moteur les ignore ou arr&#195;&#170;te l'ex&#195;&#169;cution du code pour toute la page, ce qui peut &#195;&#170;tre probl&#195;&#169;matique.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Javascript est un langage c&#195;&#180;t&#195;&#169; client&lt;/h2&gt;
&lt;p&gt;C'est un d&#195;&#169;tail tr&#195;&#168;s important &#195; comprendre : le navigateur web qui re&#195;&#167;oit du code javascript va devoir l'ex&#195;&#169;cuter lui-m&#195;&#170;me. Du coup, un navigateur install&#195;&#169; sur un ordinateur rapide ex&#195;&#169;cute le code javascript plus vite qu'un navigateur install&#195;&#169; sur un ordinateur plus ancien. Si le navigateur est vieux, il risque aussi d'&#195;&#170;tre incompatible avec la version trop r&#195;&#169;cente du code utilis&#195;&#169;, puisque Javascript est un langage qui &#195;&#169;volue &#195; travers diff&#195;&#169;rentes versions.&lt;br class='autobr' /&gt;
Si plusieurs pages ex&#195;&#169;cutent du code javascript, chaque page l'ex&#195;&#169;cutera plus lentement aussi. Bref, l'ex&#195;&#169;cution du code est d&#195;&#169;pendant de la machine finale, et pas du serveur web qui a envoy&#195;&#169; la page.&lt;/p&gt;
&lt;p&gt;Le langage &lt;i&gt;c&#195;&#180;t&#195;&#169; client&lt;/i&gt; est l'oppos&#195;&#169; d'un langage &lt;i&gt;c&#195;&#180;t&#195;&#169; serveur&lt;/i&gt;, qui est ex&#195;&#169;cut&#195;&#169; sur le serveur avant qu'il n'envoie la page vers le navigateur. Php, Asp, Ruby, Python sont des langages &lt;i&gt;c&#195;&#180;t&#195;&#169; serveur&lt;/i&gt;. Le fait qu'une seule machine ex&#195;&#169;cute le code &lt;i&gt;c&#195;&#180;t&#195;&#169; serveur&lt;/i&gt; permet d'identifier plus facilement les bugs, puisqu'il sont concentr&#195;&#169; &#195; un seul endroit et le code toujours ex&#195;&#169;cut&#195;&#169; de la m&#195;&#170;me mani&#195;&#168;re.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Javascript n'est pas Java&lt;/h2&gt;
&lt;p&gt;Le langage d&#195;&#169;velopp&#195;&#169; par Brendan Eich, employ&#195;&#169; chez Netscape en pleine guerre des navigateurs, s'appelle d'abord Livescript. Comme Netscape est en relation commerciale avec Sun Microsystems, qui d&#195;&#169;veloppe Java, il est d&#195;&#169;cid&#195;&#169; quelques jours avant la pr&#195;&#169;sentation du langage qu'il changera de nom pour Javascript, pour lui donner un air de famille. Un r&#195;&#169;flexe commercial idiot, qui produira de la confusion entre les deux langages. Si javascript s'inspire de Java, les deux langages sont tr&#195;&#168;s diff&#195;&#169;rents et ne doivent pas &#195;&#170;tre confondus.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Bref historique&lt;/h2&gt;
&lt;p&gt;La mythologie raconte que le langage a &#195;&#169;t&#195;&#169; cr&#195;&#169;&#195;&#169; en dix jours en mai 1995 par &lt;a href=&#034;https://fr.wikipedia.org/wiki/Brendan_Eich&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Brendan Eich&lt;/a&gt; qui travaille &#195; l'&#195;&#169;poque pour Netscape Communications Corporation, d&#195;&#169;veloppeur du navigateur Netscape. &lt;br class='autobr' /&gt;
En mars 1996, Netscape met en &#197;&#8220;uvre le moteur JavaScript dans son navigateur Web Netscape Navigator 2.0. Le navigateur Netscape a &#195;&#169;t&#195;&#169; largement et gratuitement distribu&#195;&#169;, et il est donc tr&#195;&#168;s populaire, ce qui assure imm&#195;&#169;diatement un engouement pour le javascript.&lt;br class='autobr' /&gt;
La &lt;a href=&#034;https://fr.wikipedia.org/wiki/%C3%89volution_de_l'usage_des_navigateurs_web#Netscape_contre_Internet_Explorer&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;guerre des navigateurs&lt;/a&gt; en est &#195; ses d&#195;&#169;but et il n'est donc pas question pour l'&#195;&#169;quipe de Internet Explorer, de Microsoft, de se concerter avec Netscape. L'&#195;&#169;quipe de Internet Explorer &#034;invente&#034; donc sa propre version qui s'appelle Jscript, qui sera impl&#195;&#169;ment&#195;&#169; dans la version 3 de Internet Explorer quelques mois plus tard.&lt;/p&gt;
&lt;p&gt;Jscript et Javascript sont tr&#195;&#168;s proche, mais le code &#195;&#169;crit pour l'un des navigateurs a une f&#195;&#162;cheuse tendance &#195; ne pas s'ex&#195;&#169;cuter sur l'autre. D&#195;&#169;velopper en script signifie donc d&#195;&#169;velopper deux versions de code pour obtenir le m&#195;&#170;me r&#195;&#169;sultat pour chacun des navigateurs. Une perte de temps qui durera jusqu'au milieu des ann&#195;&#169;es 2000.&lt;/p&gt;
&lt;p&gt;Javascript est standardis&#195;&#169; (d&#195;&#169;crit comme une norme) sous le nom d'ECMAScript en juin 1997 (la norme est &#195;&#169;crite puis valis&#195;&#169;e par &lt;a href=&#034;https://fr.wikipedia.org/wiki/Ecma_International&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Ecma International&lt;/a&gt;, un organisme de r&#195;&#169;gulation). En 2019, la norme en est &#195; sa 8eme &#195;&#169;dition.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>ajouter un &#233;v&#233;nement en clic sur un &#233;l&#233;ment</title>
		<link>http://arts-numeriques.codedrops.net/ajouter-un-evenement-en-clic-sur-un-element</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/ajouter-un-evenement-en-clic-sur-un-element</guid>
		<dc:date>2018-12-02T22:44:52Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>
&lt;p&gt;Rendre un &#233;l&#233;ment de la page clickable est une des op&#233;rations de base en int&#233;raction web. Il y a plusieurs moyens d'y arriver. &lt;br class='autobr' /&gt; Ecrire dans le tag avec l'attribut onclick &lt;br class='autobr' /&gt;
On peut ajouter un attribut onclick sur n'importe quel &#233;l&#233;ment. C'est une m&#233;thode non recommand&#233;e, car on ajoute du javascript dans du html, ce qui est consid&#233;r&#233; comme intrusif. Mais une m&#233;thode toujours utile. &lt;br class='autobr' /&gt; Cliquez moi &lt;br class='autobr' /&gt;
Associer une action &#224; un tag en pur javascript Ici, on va associer l'action uniquement avec (&#8230;)&lt;/p&gt;


-
&lt;a href="http://arts-numeriques.codedrops.net/-Manipuler-les-elements-de-la-page-" rel="directory"&gt;Manipuler les &#233;l&#233;ments de la page&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L150xH82/arton538-3acd5.jpg?1781356595' class='spip_logo spip_logo_right' width='150' height='82' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Rendre un &#233;l&#233;ment de la page clickable est une des op&#233;rations de base en int&#233;raction web. Il y a plusieurs moyens d'y arriver.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Ecrire dans le tag avec l'attribut onclick&lt;/h2&gt;
&lt;p&gt;On peut ajouter un attribut onclick sur n'importe quel &#233;l&#233;ment. C'est une m&#233;thode non recommand&#233;e, car on ajoute du javascript dans du html, ce qui est consid&#233;r&#233; comme intrusif. Mais une m&#233;thode toujours utile.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;div onclick=&#034;mafonction();&#034;&gt;Cliquez moi&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Associer une action &#224; un tag en pur javascript&lt;/h2&gt;
&lt;p&gt;Ici, on va associer l'action uniquement avec javascript. L&#224; aussi, plusieurs m&#233;thodes possibles.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Premi&#232;re m&#233;thode&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;div id=&#034;uneaction&#034;&gt;Cliquer ici&lt;/div&gt; &lt;script&gt; document.querySelector('#uneaction').onclick= function(){ alert(&#034;test&#034;); } &lt;/script&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On s&#233;lectionne l'&#233;l&#233;ment par son id et on lui associe une fonction, cod&#233;e dans la foul&#233;e.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deuxi&#232;me m&#233;thode&lt;/strong&gt;&lt;br class='autobr' /&gt;
On peut aussi &#233;crire cet appel de fonction avec &lt;i&gt;addEventListener&lt;/i&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;button&gt;Cliquer ici&lt;/button&gt; &lt;script&gt; var button = document.querySelector(&#034;button&#034;); button.addEventListener(&#034;click&#034;, function() { alert(&#034;button click&#233; !&#034;); }) &lt;/script&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Activer plusieurs boutons avec la m&#234;me fonction&lt;/h2&gt;
&lt;p&gt;La fonction forEach permet de passer en revue tous les &#233;l&#233;ments s&#233;lectionn&#233;s avec querySelectorAll, qui comme son nom l'indique s&#233;lectionne plusieurs &#233;l&#233;ments qui correspondent &#224; la requ&#234;te, et renvoie une liste, un array, au lieu de un seul &#233;l&#233;ment.&lt;br class='autobr' /&gt;
Le code suivant cr&#233;e un attribut &#034;data-style&#034; dans le tag &#034;body&#034;, que l'on peut styler avec les css&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;button data-style=&#034;off&#034; class=&#034;bouton&#034;&gt;Eteint&lt;/button&gt; &lt;button data-style=&#034;on&#034; class=&#034;bouton&#034;&gt;Allum&#233;&lt;/button&gt; &lt;script&gt; document.querySelectorAll('.bouton').forEach(function(element) { element.onclick=function(){ document.querySelector(&#034;body&#034;).dataset.style = this.dataset.style; } }); &lt;/script&gt; &lt;style&gt; body { background-color:#000; color:#fff; } body[data-style='on'] { background-color:#fff; color:#000; } &lt;/style&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;La propagation des clics&lt;/h2&gt;
&lt;p&gt;Le clic est un &#233;v&#233;nement qui peut se propager. &#224;&#8225;a signifie que si un &#233;l&#233;ment est cliqu&#233;, son parent est aussi averti du clic. Si il a lui-m&#234;me une action cod&#233;e en cas de clic, il va lui aussi s'ex&#233;cuter, ce qui peut &#234;tre g&#234;nant. Un autre cas typique est le clic sur un lien. Vous avez un lien en html traditionnel fonctionnel, mais vous codez une action en javascript sur ce m&#234;me lien. Si vous ne stoppez pas la propagation du clic, le script va s'ex&#233;cuter et dans le m&#234;me temps, le lien va s'activer, et donc changer de page. Il faut donc emp&#234;cher le lien de s'ex&#233;cuter.&lt;/p&gt;
&lt;p&gt;Voici un code non-fonctionnel :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;a href=&#034;mapage.html&#034; id=&#034;monlien&#034;&gt;Cliquez moi&lt;/a&gt; &lt;script&gt; var monaction = document.querySelector(&#034;#monlien&#034;); monaction.onclick=function(){ alert(&#034;Lien click&#233; !&#034;); } &lt;/script&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Lorsqu'on clique sur le lien, le script fait apparaitre une page d'alerte, mais d&#232;s que l'on referme celle-ci, le lien s'active et on change de page. Si le but est de rester sur la m&#234;me page, on ajoutera un code emp&#234;chant la propagation.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;button&gt;Cliquer ici&lt;/button&gt; &lt;a href=&#034;mapage.html&#034; id=&#034;monlien&#034;&gt;Cliquez moi&lt;/a&gt; &lt;script&gt; var monaction = document.querySelector(&#034;#monlien&#034;); monaction.onclick=function(){ alert(&#034;Lien click&#233; !&#034;); return false; // stoppe la propagation } &lt;/script&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Autres actions&lt;/h2&gt;
&lt;p&gt;onclick n'est pas la seule action g&#233;r&#233;e par javascript. En voici d'autres :&lt;br class='autobr' /&gt; mousedown&lt;br class='autobr' /&gt; mouseup&lt;br class='autobr' /&gt; mousemove&lt;br class='autobr' /&gt; dblclick&lt;br class='autobr' /&gt; mouseover&lt;br class='autobr' /&gt; mouseout&lt;br class='autobr' /&gt; mouseenter&lt;br class='autobr' /&gt; mouseleave&lt;br class='autobr' /&gt; contextmenu&lt;br class='autobr' /&gt;
Faite une recherche, tout ceci est abondamment document&#233; sur le net.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Manipuler les &#233;l&#233;ments de la page</title>
		<link>http://arts-numeriques.codedrops.net/Manipuler-les-elements-de-la-page-535</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/Manipuler-les-elements-de-la-page-535</guid>
		<dc:date>2018-12-01T22:35:58Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>
&lt;p&gt;Pour manipuler les &#233;l&#233;ments de la page, il faut avoir compris les bases du DOM, puis apprendre une s&#233;rie de fonctions qui permettent de s&#233;lectionner les &#233;l&#233;ments de la page. &lt;br class='autobr' /&gt; Une page faite de noeuds Le navigateur charge la page html, l'analyse pour construire sa structure (en corrigeant &#224; la vol&#233;e les erreurs de code) puis jette le document de base pour ne plus regarder que cette structure qui repr&#233;sente ce qu'il a compris du code qu'il a re&#231;u. C'est ce qu'on appelle le DOM pour Document (&#8230;)&lt;/p&gt;


-
&lt;a href="http://arts-numeriques.codedrops.net/-Manipuler-les-elements-de-la-page-" rel="directory"&gt;Manipuler les &#233;l&#233;ments de la page&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Pour manipuler les &#233;l&#233;ments de la page, il faut avoir compris les bases du DOM, puis apprendre une s&#233;rie de fonctions qui permettent de s&#233;lectionner les &#233;l&#233;ments de la page.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Une page faite de noeuds&lt;/h2&gt;
&lt;p&gt;Le navigateur charge la page html, l'analyse pour construire sa structure (en corrigeant &#224; la vol&#233;e les erreurs de code) puis jette le document de base pour ne plus regarder que cette structure qui repr&#233;sente ce qu'il a compris du code qu'il a re&#231;u. C'est ce qu'on appelle le DOM pour &lt;strong&gt;Document Object Model&lt;/strong&gt;. &lt;br class='autobr' /&gt;
Le DOM est donc une structure arborescente faites de noeuds, d&#233;crivant la structure d'une page web.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_890 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH276/dom-screenshot-d0d05.png?1781356595' width='500' height='276' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Un noeud est basiquement un tag. Chaque tag poss&#232;de possiblement des &lt;i&gt;attributs&lt;/i&gt; (un id, des classes, un href pour un lien, un src pour une image, etc.), un &lt;i&gt;contenu&lt;/i&gt; (du texte) et des &lt;i&gt;enfants&lt;/i&gt;, c'est &#224; dire d'autres tags, qui sont eux-m&#234;mes des noeuds. Et ainsi de suite.&lt;br class='autobr' /&gt;
On peut acc&#233;der &#224; chacun de ces noeuds &#224; travers javascript, et modifier librement et les attributs, et le contenu, et les enfants.&lt;/p&gt;
&lt;p&gt;On peut par exemple :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; remplacer une image par une autre en changeant le contenu de l'attribut &#034;src&#034;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; supprimer un &#233;l&#233;ment
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; cacher un &#233;l&#233;ment en lui ajoutant l'attribut css &#034;display : none&#034; puis le montrer (lors d'un clic ou un survol) en changeant cet attribut avec &#034;display : bloc&#034;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; changer le contenu texte d'un &#233;l&#233;ment, pour faire apparaitre une l&#233;gende par exemple.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;S&#233;lectionner les &#233;l&#233;ments, comme en CSS&lt;/h2&gt;
&lt;p&gt;Pour modifier une page, on va s&#233;lectionner un ou plusieurs &lt;i&gt;noeuds&lt;/i&gt; dans la page, et appliquer une s&#233;rie de transformations, comme par exemple modifier ses attributs, le d&#233;placer dans la page, lui ajouter des noeuds, etc.&lt;/p&gt;
&lt;p&gt;Les principaux outils pour ce faire sont querySelector(). &lt;br class='autobr' /&gt;
Voici un exemple :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;let titre = document.querySelector('h1');&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ce code permet de s&#233;lectionner dans la page le premier tag h1. Un seul, le premier, sera s&#233;lectionn&#233; et stock&#233; dans la variable &lt;i&gt;titre&lt;/i&gt;. Il est possible &#224; partir de l&#224; de manipuler cet &#233;l&#233;ment.&lt;/p&gt;
&lt;p&gt;Par exemple :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;// changer le contenu de l'&#233;l&#233;ment titre.textContent = 'Hello world!'; // changer la couleur du fond titre.style.backgroundColor = &#034;red&#034;; // ajouter une classe titre.classList.add(&#034;actuel&#034;);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour s&#233;lectionner plusieurs &#233;l&#233;ments, on utilisera querySelectorAll().&lt;br class='autobr' /&gt;
Le r&#233;sultat est une liste d'&#233;l&#233;ments, un peu plus difficile &#224; manipuler, car il faut passer par une boucle pour atteindre les &#233;l&#233;ments un par un.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;let liste = document.querySelectorAll('div'); // changer la couleur de fond de tous les &#233;l&#233;ments liste.forEach(function (elem) { elem.style.backgroundColor = &#034;red&#034;; })&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Comprendre les bases : le DOM</title>
		<link>http://arts-numeriques.codedrops.net/Comprendre-les-bases-le-DOM</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/Comprendre-les-bases-le-DOM</guid>
		<dc:date>2018-12-01T11:59:34Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>
&lt;p&gt;Le DOM (Document Object Model) est la structure de la page web que vous avez sous les yeux, telle qu'interpr&#195;&#169;t&#195;&#169;e par votre navigateur. Le navigateur lit donc le html, puis en d&#195;&#169;gage une structure qu'il m&#195;&#169;morise. Lorsque l'on interagit ensuite avec la page par du code (javascript principalement), on agit sur le dom, pas sur le code html d'origine. &lt;br class='autobr' /&gt; Le DOM est une sorte d'arbre, dont les deux troncs principaux sont head et body, et qui se divise ensuite en branche pour afficher tous vos (&#8230;)&lt;/p&gt;


-
&lt;a href="http://arts-numeriques.codedrops.net/-Manipuler-les-elements-de-la-page-" rel="directory"&gt;Manipuler les &#233;l&#233;ments de la page&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L150xH83/arton534-d4a53.png?1781356595' class='spip_logo spip_logo_right' width='150' height='83' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Le DOM (Document Object Model) est la structure de la page web que vous avez sous les yeux, telle qu'interpr&#195;&#169;t&#195;&#169;e par votre navigateur. Le navigateur lit donc le html, puis en d&#195;&#169;gage une structure qu'il m&#195;&#169;morise. Lorsque l'on interagit ensuite avec la page par du code (javascript principalement), on agit sur le dom, pas sur le code html d'origine.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Le DOM est une sorte d'arbre, dont les deux troncs principaux sont head et body, et qui se divise ensuite en branche pour afficher tous vos div, li et autres p.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_888 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH323/html-dom-tree-5c0fb.jpg?1781356595' width='500' height='323' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;C'est sur base de ce dom interpr&#195;&#169;t&#195;&#169; par le navigateur que vous pourrez ensuite appliquer vos styles css et agir avec javascript. Ceci est important &#195; retenir : si votre code html est mal analys&#195;&#169; par le navigateur &#195; cause d'erreurs de syntaxe, certaines parties de votre page ne pourrons pas &#195;&#170;tre atteintes. Donc pour un codage javascript efficace, &lt;strong&gt;il est important de s'appuyer sur un codage html correct.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Une fois stock&#195;&#169; dans la m&#195;&#169;moire de l'ordinateur, le dom peut &#195;&#170;tre manipul&#195;&#169; : on peut lui ajouter des branches, cloner des branches, modifier des &#195;&#169;l&#195;&#169;ments, le texte contenu dans ces &#195;&#169;l&#195;&#169;ments, puisqu'on ne manipule pas un fichier physique (le html d'origine, jet&#195;&#169; apr&#195;&#168;s l'analyse du dom), mais sa repr&#195;&#169;sentation sous forme de structure.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Le DOM et les navigateurs&lt;/h2&gt;
&lt;p&gt;La difficult&#195;&#169; jusqu'il y a quelques ann&#195;&#169;es &#195;&#169;tait que la syntaxe javascript pour agir sur le dom &#195;&#169;tait (et reste) diff&#195;&#169;rente suivant les navigateurs. L&#195; encore, le W3C tente de jouer son r&#195;&#180;le de standardisation, mais comme il ne fait que recommander, pas imposer, la standardisation du code pour interfacer avec le dom reste diff&#195;&#169;rente dans les navigateurs.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;&#034;Use strict&#034;&lt;/h2&gt;
&lt;p&gt;On a aujourd'hui une plus grande standardisation du code, qui a amen&#195;&#169; &#195; la cr&#195;&#169;ation du mode &#034;strict&#034; de javascript, qui est une fa&#195;&#167;on de sp&#195;&#169;cifier que l'on va utiliser un code contemporain, plus strict, moins tol&#195;&#169;rant avec les erreurs. Cette d&#195;&#169;claration a &#195;&#169;t&#195;&#169; introduite avec la version 5 de ECMAScript (le nom technique de javascript).&lt;br class='autobr' /&gt;
Typiquement, les variables doivent &#195;&#170;tre d&#195;&#169;clar&#195;&#169;es avant utilisation :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;x=15;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;n'est pas tol&#195;&#169;r&#195;&#169;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;var x=15;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ou mieux&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;let x=15;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;devra &#195;&#170;tre employ&#195;&#169;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Fen&#195;&#170;tre, document et navigateur&lt;/h2&gt;
&lt;p&gt;Javascript a pour but d'interagir avec le navigateur qui l'ex&#195;&#169;cute. Il peut atteindre 3 grandes entit&#195;&#169;s de celui-ci, consid&#195;&#169;r&#195;&#169; comme des objets.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_889 spip_documents spip_documents_center'&gt;&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L500xH334/document-window-navigator-357b8.png?1781356595' width='500' height='334' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#034;https://www.w3schools.com/jsref/obj_navigator.asp&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;strong&gt;navigator&lt;/strong&gt;&lt;/a&gt; est le terme permettant d'atteindre les propri&#195;&#169;t&#195;&#169;s du navigateur. On ne peut que lire les informations donn&#195;&#169;es par le navigateur, pas les changer.&lt;br class='autobr' /&gt;
Typiquement, on peut demander au navigateur
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; son nom de code (appCodeName) ou son nom (appName)
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; si il est connect&#195;&#169; &#195; internet ou pas
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; si les cookies sont accept&#195;&#169;s
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; si javascript est actif ou si le navigateur l'interdit
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; la langue et la localisation du navigateur&lt;/p&gt;
&lt;p&gt;D&#195;&#168;s qu'une page html est charg&#195;&#169;e et analys&#195;&#169;e, elle devient un objet nomm&#195;&#169; &lt;strong&gt;document&lt;/strong&gt;. Cet objet contient toute la structure et les contenus de la pages sous la forme de n&#197;&#8220;uds contenant des attributs ou d'autres objets. C'est l&#195; qu'on va pouvoir manipuler les &#195;&#169;l&#195;&#169;ments d'un page.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; lister les &#195;&#169;l&#195;&#169;ments (tags) de la page
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; acc&#195;&#169;der &#195; leur texte et &#195; leurs attributs
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; cr&#195;&#169;er des &#195;&#169;l&#195;&#169;ments dans la page
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; les supprimer
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; les d&#195;&#169;placer&lt;br class='autobr' /&gt;
et &lt;a href=&#034;https://www.w3schools.com/jsref/dom_obj_document.asp&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;beaucoup d'autres choses&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Un objet &lt;strong&gt;window&lt;/strong&gt; est cr&#195;&#169;&#195;&#169; pour chaque fen&#195;&#170;tre cr&#195;&#169;&#195;&#169;e par le navigateur. On peut acc&#195;&#169;der aux informations d'une fen&#195;&#170;tre et aussi changer certains de ses param&#195;&#168;tres :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; l'historique des pages qui y ont &#195;&#169;t&#195;&#169; vues
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; sa taille en largeur et hauteur
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; sa position dans l'&#195;&#169;cran de l'ordinateur
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; le nombre de pixels scroll&#195;&#169;s sur l'axe horizontal et vertical&lt;br class='autobr' /&gt;
et &lt;a href=&#034;https://www.w3schools.com/jsref/obj_window.asp&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;d'autres choses encore&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Cr&#195;&#169;er des onglets avec jquery</title>
		<link>http://arts-numeriques.codedrops.net/Creer-des-onglets-avec-jquery</link>
		<guid isPermaLink="true">http://arts-numeriques.codedrops.net/Creer-des-onglets-avec-jquery</guid>
		<dc:date>2018-04-24T09:30:42Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>



		<description>
&lt;p&gt;Une utilisation assez standard de jquery est celle d'onglets. Ils permettent d'afficher facilement plus d'information dans peu d'espace. Il existe des centaines de fa&#195;&#167;ons de coder des onglets, et jquery poss&#195;&#168;de m&#195;&#170;me dans ses librairies &#034;UI&#034; des fonctions pr&#195;&#168;tes &#195; l'emploi. Cet exemple est donc surtout p&#195;&#169;dagogique, mais il est aussi fonctionnel. &lt;br class='autobr' /&gt; Le code : &lt;br class='autobr' /&gt; &lt; !DOCTYPE html&gt; Des onglets &lt;br class='autobr' /&gt; ul,li margin:0 (&#8230;)&lt;/p&gt;


-
&lt;a href="http://arts-numeriques.codedrops.net/-JQuery-79-" rel="directory"&gt;JQuery&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='http://arts-numeriques.codedrops.net/local/cache-vignettes/L150xH118/arton521-33235.jpg?1781356595' class='spip_logo spip_logo_right' width='150' height='118' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Une utilisation assez standard de jquery est celle d'onglets. Ils permettent d'afficher facilement plus d'information dans peu d'espace. Il existe des centaines de fa&#195;&#167;ons de coder des onglets, et jquery poss&#195;&#168;de m&#195;&#170;me dans ses librairies &#034;UI&#034; des fonctions pr&#195;&#168;tes &#195; l'emploi. Cet exemple est donc surtout p&#195;&#169;dagogique, mais il est aussi fonctionnel.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Le code :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;!DOCTYPE html&gt;
&lt;html lang=&#034;fr&#034;&gt; &lt;head&gt; &lt;meta charset=&#034;utf-8&#034;&gt; &lt;meta name=&#034;viewport&#034; content=&#034;width=device-width, initial-scale=1.0&#034;&gt; &lt;title&gt;Des onglets&lt;/title&gt; &lt;script src=&#034;jquery-3.1.1.min.js&#034;&gt;&lt;/script&gt; &lt;style&gt; ul,li { margin:0; padding:0; list-style-type: none; } #onglets { display:flex; } #onglets li { padding:10px; background-color:#ddd; border-radius:6px 6px 0 0; margin-right:2px; cursor:pointer; } #onglets li:hover { background-color:#ccc; } #contenus div { padding:20px; background-color:#ddd; min-height:300px; } &lt;/style&gt; &lt;/head&gt; &lt;body&gt; &lt;ul id=&#034;onglets&#034;&gt; &lt;li class=&#034;actuel&#034; data-tab=&#034;tab1&#034;&gt;Tab 1&lt;/li&gt; &lt;li data-tab=&#034;tab2&#034;&gt;Tab 2&lt;/li&gt; &lt;li data-tab=&#034;tab3&#034;&gt;Tab 3&lt;/li&gt; &lt;/ul&gt; &lt;section id=&#034;contenus&#034;&gt; &lt;div id=&#034;tab1&#034;&gt;Contenu du tab 1&lt;/div&gt; &lt;div id=&#034;tab2&#034;&gt;Contenu du tab 2&lt;/div&gt; &lt;div id=&#034;tab3&#034;&gt;Contenu du tab 3&lt;/div&gt; &lt;/section&gt; &lt;script&gt; $(document).ready(function(){ active_tab(); $(&#034;#onglets li&#034;).click(function(){ if(! $(this).hasClass(&#034;actuel&#034;)){ $(this).addClass(&#034;actuel&#034;).siblings().removeClass(&#034;actuel&#034;); active_tab(); } }); }); function active_tab(){ var lequel=$(&#034;#onglets .actuel&#034;).attr(&#034;data-tab&#034;); $(&#034;#&#034;+lequel).show().siblings().hide(); } &lt;/script&gt; &lt;/body&gt;
&lt;/html&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
