<?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>HTML5 Archives - InfoD 74</title>
	<atom:link href="https://www.info-d-74.com/category/html5/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.info-d-74.com/category/html5/</link>
	<description>Développeur web freelance</description>
	<lastBuildDate>Fri, 21 Apr 2023 11:28:58 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.4</generator>

<image>
	<url>https://www.info-d-74.com/wp-content/uploads/2015/12/info-d-74-logo-96x96.png</url>
	<title>HTML5 Archives - InfoD 74</title>
	<link>https://www.info-d-74.com/category/html5/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Système solaire avec gravité Newtonienne</title>
		<link>https://www.info-d-74.com/systeme-solaire-avec-gravite-newtonienne/</link>
					<comments>https://www.info-d-74.com/systeme-solaire-avec-gravite-newtonienne/#respond</comments>
		
		<dc:creator><![CDATA[info74]]></dc:creator>
		<pubDate>Sat, 24 Dec 2022 14:18:26 +0000</pubDate>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<guid isPermaLink="false">https://www.info-d-74.com/?p=3286</guid>

					<description><![CDATA[<p>Une autre démo 3D demo faite avec Three JS « Système solaire avec gravité Newtonienne » : Vous pouvez changer les masses, les positions et les vélocités du soleil, de la terre et de la lune. Et aussi définir la position de la caméra et de l&#8217;objet à suivre. Il est également possible de voir les trajectoires [&#8230;]</p>
<p>L’article <a href="https://www.info-d-74.com/systeme-solaire-avec-gravite-newtonienne/">Système solaire avec gravité Newtonienne</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Une autre démo 3D demo faite avec Three JS « Système solaire avec gravité Newtonienne » :</p>
<p><a href="https://info-d-74.com/demos/solar_system/" target="_blank" rel="noopener"><img fetchpriority="high" decoding="async" class="wp-image-3284 size-large alignnone" src="https://www.info-d-74.com/wp-content/uploads/2022/12/preview-1-1024x609.jpg" alt="" width="900" height="535" srcset="https://www.info-d-74.com/wp-content/uploads/2022/12/preview-1-1024x609.jpg 1024w, https://www.info-d-74.com/wp-content/uploads/2022/12/preview-1-600x357.jpg 600w, https://www.info-d-74.com/wp-content/uploads/2022/12/preview-1-300x179.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2022/12/preview-1-150x89.jpg 150w, https://www.info-d-74.com/wp-content/uploads/2022/12/preview-1-250x150.jpg 250w, https://www.info-d-74.com/wp-content/uploads/2022/12/preview-1.jpg 1346w" sizes="(max-width: 900px) 100vw, 900px" /></a></p>
<p>Vous pouvez changer les masses, les positions et les vélocités du soleil, de la terre et de la lune.<br />
Et aussi définir la position de la caméra et de l&rsquo;objet à suivre.<br />
Il est également possible de voir les trajectoires des objets et quelques statistiques (nombre de collision, distances minimales et maximales)</p>
<p>L’article <a href="https://www.info-d-74.com/systeme-solaire-avec-gravite-newtonienne/">Système solaire avec gravité Newtonienne</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.info-d-74.com/systeme-solaire-avec-gravite-newtonienne/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Universe Experience</title>
		<link>https://www.info-d-74.com/universe-experience/</link>
					<comments>https://www.info-d-74.com/universe-experience/#respond</comments>
		
		<dc:creator><![CDATA[info74]]></dc:creator>
		<pubDate>Wed, 14 Dec 2022 12:02:25 +0000</pubDate>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[particule]]></category>
		<category><![CDATA[three js]]></category>
		<category><![CDATA[univers]]></category>
		<guid isPermaLink="false">https://www.info-d-74.com/?p=3271</guid>

					<description><![CDATA[<p>Une petite démonstration 3D que j&#8217;ai appelé « Universe Experience » : Elle simule les interactions entre les particules dans notre univers. Vous pouvez changer leurs paramètres : nombre,  masse et charge. Et aussi modifier les distances pour la gravité et le magnétisme. Développée avec Three JS et inspiré de cette vidéo « Artificial Particle Life » :</p>
<p>L’article <a href="https://www.info-d-74.com/universe-experience/">Universe Experience</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Une petite démonstration 3D que j&rsquo;ai appelé « Universe Experience » :</p>
<p><a href="https://www.info-d-74.com/demos/universe_experience/" target="_blank" rel="noopener"><img decoding="async" class="alignnone wp-image-3272 size-large" src="https://www.info-d-74.com/wp-content/uploads/2022/12/preview-1024x670.jpg" alt="" width="900" height="589" srcset="https://www.info-d-74.com/wp-content/uploads/2022/12/preview-1024x670.jpg 1024w, https://www.info-d-74.com/wp-content/uploads/2022/12/preview-600x393.jpg 600w, https://www.info-d-74.com/wp-content/uploads/2022/12/preview-300x196.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2022/12/preview-150x98.jpg 150w, https://www.info-d-74.com/wp-content/uploads/2022/12/preview.jpg 1320w" sizes="(max-width: 900px) 100vw, 900px" /></a></p>
<p>Elle simule les interactions entre les particules dans notre univers. Vous pouvez changer leurs paramètres : nombre,  masse et charge. Et aussi modifier les distances pour la gravité et le magnétisme.</p>
<p>Développée avec <a href="https://threejs.org/" target="_blank" rel="noopener">Three JS</a> et inspiré de cette vidéo « Artificial Particle Life » :</p>
<p><a href="https://www.youtube.com/watch?v=0Kx4Y9TVMGg">https://www.youtube.com/watch?v=0Kx4Y9TVMGg</a></p>
<p>L’article <a href="https://www.info-d-74.com/universe-experience/">Universe Experience</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.info-d-74.com/universe-experience/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Iron Maiden 3D Concert (démo Three JS)</title>
		<link>https://www.info-d-74.com/iron-maiden-3d-concert-demo-three-js/</link>
					<comments>https://www.info-d-74.com/iron-maiden-3d-concert-demo-three-js/#respond</comments>
		
		<dc:creator><![CDATA[info74]]></dc:creator>
		<pubDate>Tue, 29 Aug 2017 09:19:23 +0000</pubDate>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[concert]]></category>
		<category><![CDATA[iron maiden]]></category>
		<category><![CDATA[three js]]></category>
		<category><![CDATA[vidéo]]></category>
		<category><![CDATA[webgl]]></category>
		<guid isPermaLink="false">https://www.info-d-74.com/?p=1714</guid>

					<description><![CDATA[<p>Une petite démo de ce qu&#8217;on peut faire avec Three JS (moteur 3D webGL). Cliquez sur l&#8217;image pour accéder à la démo : Le site officiel de Three JS : https://threejs.org/ Un petit tuto pour bien débuter avec Three JS : https://www.alsacreations.com/tuto/lire/1572-webgl-3d-three-canvas-threejs.html</p>
<p>L’article <a href="https://www.info-d-74.com/iron-maiden-3d-concert-demo-three-js/">Iron Maiden 3D Concert (démo Three JS)</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Une petite démo de ce qu&rsquo;on peut faire avec Three JS (moteur 3D webGL). Cliquez sur l&rsquo;image pour accéder à la démo :</p>
<p><a href="http://www.info-d-74.com/demos/video_3d/"><img decoding="async" class="alignnone size-large wp-image-1715" src="https://www.info-d-74.com/wp-content/uploads/2017/08/iron_maiden_three_js-1024x556.jpg" alt="Iron Maiden 3D Concert (Three JS)" width="900" height="489" srcset="https://www.info-d-74.com/wp-content/uploads/2017/08/iron_maiden_three_js-1024x556.jpg 1024w, https://www.info-d-74.com/wp-content/uploads/2017/08/iron_maiden_three_js-600x326.jpg 600w, https://www.info-d-74.com/wp-content/uploads/2017/08/iron_maiden_three_js-300x163.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2017/08/iron_maiden_three_js-150x81.jpg 150w, https://www.info-d-74.com/wp-content/uploads/2017/08/iron_maiden_three_js.jpg 1426w" sizes="(max-width: 900px) 100vw, 900px" /></a></p>
<p>Le site officiel de Three JS : <a href="https://threejs.org/" target="_blank" rel="noopener">https://threejs.org/</a></p>
<p>Un petit tuto pour bien débuter avec Three JS : <a href="https://www.alsacreations.com/tuto/lire/1572-webgl-3d-three-canvas-threejs.html" target="_blank" rel="noopener">https://www.alsacreations.com/tuto/lire/1572-webgl-3d-three-canvas-threejs.html</a></p>
<p>L’article <a href="https://www.info-d-74.com/iron-maiden-3d-concert-demo-three-js/">Iron Maiden 3D Concert (démo Three JS)</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.info-d-74.com/iron-maiden-3d-concert-demo-three-js/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Island &#8211; Démo WebGL (Babylon JS)</title>
		<link>https://www.info-d-74.com/island-demo-babylon-js-webgl/</link>
					<comments>https://www.info-d-74.com/island-demo-babylon-js-webgl/#respond</comments>
		
		<dc:creator><![CDATA[info74]]></dc:creator>
		<pubDate>Thu, 21 Jan 2016 16:44:56 +0000</pubDate>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[babylon js]]></category>
		<category><![CDATA[babylonjs]]></category>
		<category><![CDATA[démo]]></category>
		<category><![CDATA[island]]></category>
		<category><![CDATA[webgl]]></category>
		<guid isPermaLink="false">https://www.info-d-74.com/?p=1071</guid>

					<description><![CDATA[<p>Une petite démo WebGL crée avec l&#8217;excellente librairie BabylonJS : Je mettrais à jour régulièrement cet article au fur et à mesure de l&#8217;avancement du projet 🙂 Mise à jour du 01/02/2016 Ajout d&#8217;un papillon et d&#8217;un peu de végétation :</p>
<p>L’article <a href="https://www.info-d-74.com/island-demo-babylon-js-webgl/">Island &#8211; Démo WebGL (Babylon JS)</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Une petite démo WebGL crée avec l&rsquo;excellente librairie <a href="http://www.babylonjs.com/" target="_blank">BabylonJS</a> :</p>
<p><a href="https://www.info-d-74.com/demos/island/" target="_blank" rel="attachment wp-att-1072"><img loading="lazy" decoding="async" class="alignnone wp-image-1072 size-large" src="https://www.info-d-74.com/wp-content/uploads/2016/01/version_1-1024x617.jpg" alt="Island - démo WebGL (BabylonJS)" width="900" height="542" srcset="https://www.info-d-74.com/wp-content/uploads/2016/01/version_1-1024x617.jpg 1024w, https://www.info-d-74.com/wp-content/uploads/2016/01/version_1-600x362.jpg 600w, https://www.info-d-74.com/wp-content/uploads/2016/01/version_1-300x181.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2016/01/version_1-150x90.jpg 150w, https://www.info-d-74.com/wp-content/uploads/2016/01/version_1-250x150.jpg 250w, https://www.info-d-74.com/wp-content/uploads/2016/01/version_1.jpg 1440w" sizes="(max-width: 900px) 100vw, 900px" /></a></p>
<p>Je mettrais à jour régulièrement cet article au fur et à mesure de l&rsquo;avancement du projet <img alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" consent-original-src-_="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" consent-required="3358" consent-by="services" consent-id="3360"/></p>
<p><strong>Mise à jour du 01/02/2016</strong></p>
<p>Ajout d&rsquo;un papillon et d&rsquo;un peu de végétation :</p>
<p><a href="https://www.info-d-74.com/wp-content/uploads/2016/01/papillon.jpg" rel="attachment wp-att-1076"><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-1076" src="https://www.info-d-74.com/wp-content/uploads/2016/01/papillon-300x190.jpg" alt="papillon" width="300" height="190" srcset="https://www.info-d-74.com/wp-content/uploads/2016/01/papillon-300x190.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2016/01/papillon-600x380.jpg 600w, https://www.info-d-74.com/wp-content/uploads/2016/01/papillon.jpg 1024w, https://www.info-d-74.com/wp-content/uploads/2016/01/papillon-237x150.jpg 237w, https://www.info-d-74.com/wp-content/uploads/2016/01/papillon-150x95.jpg 150w" sizes="(max-width: 300px) 100vw, 300px" /></a> <a href="https://www.info-d-74.com/wp-content/uploads/2016/01/vegetation.jpg" rel="attachment wp-att-1077"><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-1077" src="https://www.info-d-74.com/wp-content/uploads/2016/01/vegetation-300x190.jpg" alt="vegetation" width="300" height="190" srcset="https://www.info-d-74.com/wp-content/uploads/2016/01/vegetation-300x190.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2016/01/vegetation-600x380.jpg 600w, https://www.info-d-74.com/wp-content/uploads/2016/01/vegetation.jpg 1024w, https://www.info-d-74.com/wp-content/uploads/2016/01/vegetation-237x150.jpg 237w, https://www.info-d-74.com/wp-content/uploads/2016/01/vegetation-150x95.jpg 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>L’article <a href="https://www.info-d-74.com/island-demo-babylon-js-webgl/">Island &#8211; Démo WebGL (Babylon JS)</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.info-d-74.com/island-demo-babylon-js-webgl/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Les websocket &#8211; Tutoriel avec Node JS</title>
		<link>https://www.info-d-74.com/les-websockets-tutoriel-avec-node-js/</link>
					<comments>https://www.info-d-74.com/les-websockets-tutoriel-avec-node-js/#respond</comments>
		
		<dc:creator><![CDATA[info74]]></dc:creator>
		<pubDate>Wed, 17 Apr 2013 15:29:29 +0000</pubDate>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Tutoriaux]]></category>
		<category><![CDATA[node js]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[web socket]]></category>
		<guid isPermaLink="false">https://www.info-d-74.com/?p=529</guid>

					<description><![CDATA[<p>Qu&#8217;est ce que les websockets ? Définition de wikipédia : Le protocole WebSocket vise à développer un canal de communication bidirectionnel et full-duplex sur un socket TCP pour les navigateurs et les serveurs web. C&#8217;est une des technologies apportées par HTML5. En fait il s&#8217;agit de permettre l&#8217;ouverture d&#8217;une connexion réseau entre une page web [&#8230;]</p>
<p>L’article <a href="https://www.info-d-74.com/les-websockets-tutoriel-avec-node-js/">Les websocket &#8211; Tutoriel avec Node JS</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Qu&rsquo;est ce que les websockets ?</h2>
<p><strong>Définition de wikipédia :</strong> <em>Le protocole WebSocket vise à développer un canal de communication bidirectionnel et full-duplex sur un socket TCP pour les navigateurs et les serveurs web.</em></p>
<p>C&rsquo;est une des technologies apportées par HTML5. En fait il s&rsquo;agit de permettre l&rsquo;ouverture d&rsquo;une connexion réseau entre une page web et un serveur. Voici un petit schéma pour mieux comprendre :</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-787" src="https://www.info-d-74.com/wp-content/uploads/2015/12/websocket_schema.png" alt="websocket_schema" width="640" height="400" srcset="https://www.info-d-74.com/wp-content/uploads/2015/12/websocket_schema.png 640w, https://www.info-d-74.com/wp-content/uploads/2015/12/websocket_schema-600x375.png 600w, https://www.info-d-74.com/wp-content/uploads/2015/12/websocket_schema-300x188.png 300w, https://www.info-d-74.com/wp-content/uploads/2015/12/websocket_schema-240x150.png 240w, https://www.info-d-74.com/wp-content/uploads/2015/12/websocket_schema-150x94.png 150w" sizes="(max-width: 640px) 100vw, 640px" /></p>
<p><span id="more-529"></span></p>
<p>Les avantages sont multiples :</p>
<ul>
<li>permettre au serveur d&rsquo;envoyer des données vers les pages connectées (impossible avec Ajax)</li>
<li>économie de bande passante. On ouvre la connexion vers le serveur et on transmet tout ce que l&rsquo;on veut dans les 2 sens (page vers serveur, serveur vers page).</li>
<li>rapidité de transmission des données</li>
</ul>
<h2>Node JS</h2>
<p><a title="Node JS" href="http://nodejs.org/" target="_blank" rel="noopener">Node JS</a> est un des nombreux serveurs permettant de faire du Web Socket. C&rsquo;est celui que nous allons utiliser dans ce tutoriel.</p>
<h3>Helloworld</h3>
<p>Téléchargez la dernière version et installez-la. Ensuite créer un fichier <em>test.js</em> dans C:Progam Filesnodejs<br />
Dans ce fichier placer le code suivant :</p>
<blockquote>
<pre>console.log('Helloworld');</pre>
</blockquote>
<p>Notre fichier serveur est fait. Il faut maintenant lancer votre serveur. Pour cela ouvrez une invite de commande et placez-vous dans le dossier nodejs : <em>cd C:Progam Filesnodejs </em>puis taper simplement<em> node test.js. </em>Vous devriez voir apparaitre<em> Helloworld. </em><em><br />
</em></p>
<h3>Socket IO</h3>
<p>Maintenant pour faire communiquer une page web avec notre serveur nous allons utiliser le plugin socket.io<em>. </em>Toujours dans votre invite de commande tapez : <em>npm install socket.io<br />
</em></p>
<p>Si vous obtenez des erreurs pendant l&rsquo;installation relancez votre invite de commande en mode administrateur (cliquez droit puis &lsquo;Exécuter en tant qu&rsquo;administrateur&rsquo;).</p>
<p>Une fois l&rsquo;installation de <em>socket.io</em> terminé reprenez votre fichier <em>test.js</em> et placez y ce code :</p>
<blockquote>
<pre>var http = require("http");
httpServer = http.createServer()
httpServer.listen(8888);
var io = require('socket.io').listen(httpServer);
io.sockets.on('connection', function (socket) {
   socket.emit('connected', 'Connexion ok');
});</pre>
</blockquote>
<p>On fait écouter notre serveur sur le port 8888 et lorsque l&rsquo;on reçoit une connexion on émet l’événement <em>connected</em> avec comme données envoyés au client : &lsquo;Connexion ok&rsquo;.</p>
<p>Maintenant nous allons créer une page web qui va communiquer avec notre serveur : on va se connecter sur le serveur sur le port 8888 et attendre l’événement <em>connected. </em>Avant de pouvoir réaliser ça on va devoir télécharger la version client de socket.io : <a title="Socket IO Client Javascript" href="https://www.info-d-74.com/wp-content/uploads/2013/04/socket.io_.js" target="_blank" rel="noopener">socket.io.js</a>. Placer ce fichier dans le même dossier que votre future page web. Voici le code de la page en question :</p>
<blockquote>
<pre>&lt;!doctype html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;script src="socket.io.js"&gt;&lt;/script&gt;
&lt;script&gt;
    socket = io.connect('http://localhost:8888');
    socket.on('connected', function (data) {
        alert(data);
    });
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</blockquote>
<p>Maintenant lancez votre serveur (<em>node test.js</em>) et accédez à votre page web. Vous devriez voir &lsquo;Connexion ok&rsquo;.</p>
<p>Pour faire simple il y a 2 choses à retenir :<br />
quand vous voulez envoyés des données : <em>socket.emit(&lsquo;event&rsquo;, data);</em><br />
quand vous recevez des données : <em>socket.on(&lsquo;event&rsquo;, function(data){ });</em></p>
<p>Et ce que vous soyez coté client ou coté serveur.</p>
<p>Du coté du serveur <em>socket.broadcast.emit(<em>&lsquo;event&rsquo;, data);</em></em> permet d&rsquo;envoyer des données à tous les client connectés<em>.<br />
</em></p>
<h2>Vidéo de démonstration</h2>
<p>Pour terminer voici une petite démonstration de communication entre un IPhone et un Firefox sur un PC de bureau grâce à Node JS :</p>
<p><iframe width="540" height="400" frameborder="0" allowfullscreen="allowfullscreen" consent-original-src-_="http://www.youtube.com/embed/1lYujEYIdcs" consent-required="3350" consent-by="services" consent-id="3352" consent-click-original-src-_="http://www.youtube.com/embed/1lYujEYIdcs?autoplay=1"></iframe></p>
<p>Cette technologie ouvre bien des portes, notamment dans le domaine du jeux vidéo et des applications multi-utilisateurs.</p>
<p>L’article <a href="https://www.info-d-74.com/les-websockets-tutoriel-avec-node-js/">Les websocket &#8211; Tutoriel avec Node JS</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.info-d-74.com/les-websockets-tutoriel-avec-node-js/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Responsive Web design et media queries</title>
		<link>https://www.info-d-74.com/responsive-web-design-et-media-queries/</link>
					<comments>https://www.info-d-74.com/responsive-web-design-et-media-queries/#respond</comments>
		
		<dc:creator><![CDATA[info74]]></dc:creator>
		<pubDate>Thu, 17 Jan 2013 15:58:24 +0000</pubDate>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Tutoriaux]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[media queries]]></category>
		<category><![CDATA[responsive web design]]></category>
		<guid isPermaLink="false">https://www.info-d-74.com/?p=477</guid>

					<description><![CDATA[<p>Qu’est ce que le Responsive Web Design Le Responsive Web design est un terme que l’on rencontre de plus en plus souvent dernièrement. Sous ce terme se cache en fait un concept simple : le design d’un site ou d’une application web va s’adapter automatiquement à l’appareil (PC de bureau, Smartphone, IPad, etc) qui est [&#8230;]</p>
<p>L’article <a href="https://www.info-d-74.com/responsive-web-design-et-media-queries/">Responsive Web design et media queries</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Qu’est ce que le Responsive Web Design</h2>
<p>Le Responsive Web design est un terme que l’on rencontre de plus en plus souvent dernièrement. Sous ce terme se cache en fait un concept simple : le design d’un site ou d’une application web va s’adapter automatiquement à l’appareil (PC de bureau, Smartphone, IPad, etc) qui est utilisé suivants ses caractéristiques techniques (la taille de l’écran principalement).</p>
<p><span id="more-477"></span></p>
<h2>Le tutoriel Media Queries</h2>
<p>Une des manières de faire du Responsive Web Design : les Media Queries de CSS3. Je vous propose donc un tutoriel sur les Media Queries dans cette article. Je ne vais donc pas détailler tous les aspects des Media Queries (Vous pouvez consulter l’article d’Alsa Creations à ce sujet : <a href="http://www.alsacreations.com/article/lire/930-css3-media-queries.html" target="_blank" rel="noopener">Les Media Queries CSS3</a>), le but étant de montrer directement leur utilisation dans un exemple (<a title="Démo Repsonsive Web Design (Media Queries)" href="/demos/responsive_web_design_media_queries/" target="_blank" rel="noopener">Voir la page d&rsquo;exemple de Responsive Web design</a>).</p>
<p>Pour ce tutoriel nous allons donc créer une page qui va s’adapter pour 3 types de résolutions :</p>
<ul>
<li>PC de bureau</li>
<li>Tablettes</li>
<li>Smartphones</li>
</ul>
<p>Commençons par le gabarit de notre page HTML. Notre page va se composer d’une bannière, un menu, un contenu principal (texte + images), une liste d’articles et un pied de page. Voici le code :</p>
<blockquote>
<pre>&lt;!DOCTYPE html&gt;
  &lt;head&gt;
    &lt;link rel="stylesheet" href="style.css" type="text/css" media="all" /&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;header id="banner"&gt;
    &lt;/header&gt;
    &lt;menu&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href="#"&gt;Lien 1&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="#"&gt;Lien 2&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="#"&gt;Lien 3&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="#"&gt;Lien 4&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/menu&gt;
    &lt;section id="main"&gt;
      &lt;section id="content"&gt;
         &lt;h1&gt;Titre&lt;/h1&gt;
         &lt;p&gt;&lt;img src="img/img.jpg" alt="" class="fl_left" /&gt;Mauris viverra augue purus, vitae ornare tortor. Sed fringilla pharetra luctus. Proin vehicula, erat ac egestas dictum, elit lectus pharetra massa, vel consequat massa quam cursus tellus. Integer sed augue arcu. Proin vestibulum urna fringilla mauris convallis pretium. Quisque mattis euismod turpis ut feugiat. Quisque lobortis, magna sit amet convallis lacinia, magna nibh mattis elit, nec mollis orci sapien ultrices lectus. Pellentesque egestas ipsum et libero viverra ut blandit dolor lacinia. Cras eget nulla a nulla tristique ullamcorper. Aenean ut lorem non diam dictum luctus eu vel lorem. Donec interdum rhoncus dui. Fusce ac massa nec augue aliquet interdum. Etiam egestas, justo vel lacinia sagittis, lorem purus rutrum lorem, non tristique massa dui ut erat.&lt;/p&gt;

         &lt;p&gt;&lt;img src="img/img2.jpg" alt="" class="fl_left" /&gt;Mauris viverra augue purus, vitae ornare tortor. Sed fringilla pharetra luctus. Proin vehicula, erat ac egestas dictum, elit lectus pharetra massa, vel consequat massa quam cursus tellus. Integer sed augue arcu. Proin vestibulum urna fringilla mauris convallis pretium. Quisque mattis euismod turpis ut feugiat. Quisque lobortis, magna sit amet convallis lacinia, magna nibh mattis elit, nec mollis orci sapien ultrices lectus. Pellentesque egestas ipsum et libero viverra ut blandit dolor lacinia. Cras eget nulla a nulla tristique ullamcorper. Aenean ut lorem non diam dictum luctus eu vel lorem. Donec interdum rhoncus dui. Fusce ac massa nec augue aliquet interdum. Etiam egestas, justo vel lacinia sagittis, lorem purus rutrum lorem, non tristique massa dui ut erat.&lt;/p&gt; 
      &lt;/section&gt;
      &lt;section id="right"&gt;
        &lt;article&gt;
          &lt;h2&gt;dfdfd&lt;/h2&gt;
          &lt;p&gt;
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam urna sem, tempor sit amet posuere non, semper non magna. Praesent felis urna, congue quis tempor non, imperdiet id lacus.
          &lt;/p&gt;
        &lt;/article&gt;
        &lt;article&gt;
          &lt;h2&gt;dfdfd&lt;/h2&gt;
          &lt;p&gt;
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam urna sem, tempor sit amet posuere non, semper non magna. Praesent felis urna, congue quis tempor non, imperdiet id lacus.
          &lt;/p&gt;
        &lt;/article&gt;
        &lt;article&gt;
          &lt;h2&gt;dfdfd&lt;/h2&gt;
          &lt;p&gt;
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam urna sem, tempor sit amet posuere non, semper non magna. Praesent felis urna, congue quis tempor non, imperdiet id lacus.
          &lt;/p&gt;
        &lt;/article&gt;
      &lt;/section&gt;
      &lt;p class="clear"&gt;&lt;/p&gt;
    &lt;/section&gt;
    &lt;footer&gt;
      &lt;p&gt;Footer&lt;/p&gt;
    &lt;/footer&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre>
</blockquote>
<p>Maintenant commençons avec notre feuille de styles CSS. Nous allons dans un premier temps mettre en place le CSS pour la version bureau, puis nous viendrons ajouter les Media Queries pour les versions tablettes et Smartphones. Voila la feuille de styles de base :</p>
<blockquote>
<pre>body {
  display: block;
  width: 900px;
  margin: 0 auto;
  font-size: 14px;
}

header {
  background-image: url(img/banner.jpg);
  height: 150px;
  width: 100%;
}

menu {
  height: 30px;
  background: #4d68b3;
  margin: 0;
  padding: 10px; 
}

menu ul {
  list-style: none;
  margin: 0;
  padding: 0;
}

menu ul li {
  float: left;
  margin-right: 10px;
  background: #fff;
  padding: 5px; 
}

#main {
  background: #a4b9f6;
  padding: 10px;
}

#main #content, #main #right { 
  float: left;
}

#main #content {
  width: 600px;
  padding-right: 10px;
}

#main #right {
  width: 260px;
  clear: after;
}

#main h1 {
  font-size: 22px;
  font-weight: bold;
}

#main h2 {
  font-size: 18px;
  font-weight: bold;
}

#right article {
  border-bottom: 1px solid #4D68B3;
}

.fl_left {
  float: left;
}

img.fl_left {
  padding-right: 5px;
}

footer {
  text-align: center;
  padding: 10px;
  background: #dcdcdc;
}

.clear {
  clear: both;
}</pre>
</blockquote>
<p>Nous avons les styles de bases qui permettent d’obtenir ce résultat :</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-821" src="https://www.info-d-74.com/wp-content/uploads/2015/12/resultat1.jpg" alt="resultat1" width="640" height="564" srcset="https://www.info-d-74.com/wp-content/uploads/2015/12/resultat1.jpg 640w, https://www.info-d-74.com/wp-content/uploads/2015/12/resultat1-600x529.jpg 600w, https://www.info-d-74.com/wp-content/uploads/2015/12/resultat1-300x264.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2015/12/resultat1-170x150.jpg 170w, https://www.info-d-74.com/wp-content/uploads/2015/12/resultat1-150x132.jpg 150w" sizes="(max-width: 640px) 100vw, 640px" /></p>
<p>Passons maintenant aux fameuses Media Queries. Notre site faisant 900px de large nous allons devoir spécifier 2 alternatives de styles :</p>
<ul>
<li>pour les résolutions de largeur entre 900px et 768px (tablettes)</li>
<li>pour toutes les résolutions inférieures à 768px (Smartphone)</li>
</ul>
<p>Pour les résolutions de tablettes nous allons réduire le body à 768px de large, afficher une bannière à la bonne taille, faire en sorte que le contenu principal prennent 100% de la largeur et que les articles de droite s’affichent en dessous. Pour les résolutions inférieures (Smartphones) on donne simplement au body une largeur de 100% pour que tout l’écran soit utilisé et on affiche une bannière encore plus petite. Voila le code CSS Media Queries à ajouter au fichier <em>style.css</em> pour réaliser tout ça :</p>
<blockquote>
<pre>@media screen and (max-width: 768px) {
  body {
    width: 100%;
  }

  header {
    background: #DCDCDC url(img/banner_mobile.jpg) top left no-repeat;
    height: 104px;
  }

  #main #content, #main #right {
    width: 100%;
    float: none;
  }
}

@media screen and (min-width: 769px) and (max-width: 900px) {
  body {
    width: 768px;
  }

  header {
    background-image: url(img/banner_tablette.jpg);
  }

  #main #content, #main #right {
    width: 100%;
    float: none;
  }
}</pre>
</blockquote>
<p>On voit que les Media Queries sont très simples à utiliser : on donne les conditions d&rsquo;applications des styles contenus dans la Media Queries (ici min-width et max-width, mais il existe de nombreux autres paramètres pour les Media Queries. Voir : <a title="W3C - Media Queries CSS3" href="http://www.w3.org/TR/css3-mediaqueries/" target="_blank" rel="noopener">http://www.w3.org/TR/css3-mediaqueries/</a>)</p>
<p>Voila un petit aperçu du résultat dans Chrome :</p>
<p><iframe width="420" height="315" frameborder="0" allowfullscreen="allowfullscreen" consent-original-src-_="http://www.youtube.com/embed/kcLA5-wk2w0" consent-required="3350" consent-by="services" consent-id="3352" consent-click-original-src-_="http://www.youtube.com/embed/kcLA5-wk2w0?autoplay=1"></iframe></p>
<h2>Et Internet Explorer dans tout ça ?</h2>
<p>Les Media Queries sont supportées par la plupart des navigateur du marché (je n&rsquo;ai rencontré aucun problème sous FireFox, Chrome, Opera et Safari). Mais comme souvent avec les nouvelles technologies du Web Internet Explorer n’est pas le plus en avance des navigateurs ! Les Medias Queries ne dérogent pas à ce constat car si vous testez sur Internet Explorer 8 cela ne fonctionnera pas. 2 raisons à cela :</p>
<ul>
<li>les versions d’Internet Explorer inférieures à 9 ne prend pas en charge les nouvelles balises HTML5 (section, article, etc)</li>
<li>les versions d’Internet Explorer inférieures à 9 ne gère pas les Media Queries</li>
</ul>
<p>Heureusement il existe des solutions Javascript pour résoudre ces 2 problèmes. Pour qu’Internet Explorer gère les balises HTML5 nous allons utiliser <a title="HTML5Shiv" href="http://code.google.com/p/html5shiv/" target="_blank" rel="noopener">html5shiv</a> et pour les Media Queries <a title="Repond.js" href="https://github.com/scottjehl/Respond" target="_blank" rel="noopener">Reponsd.js.</a> Ces 2 solutions sont très simples à utiliser puisqu&rsquo;il suffit d&rsquo;ajouter un fichier JavaScript pour chacune :</p>
<blockquote>
<pre>&lt;!--[if lte IE 8]&gt;
  &lt;script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"&gt;&lt;/script&gt;
  &lt;script src="respond.min.js"&gt;&lt;/script&gt;
&lt;![endif]--&gt;</pre>
</blockquote>
<p>Une fois ceci fait notre Responsive Web Design fonctionne également sous Internet Explorer 8 (6 et 7 aussi normalement, mais je n’ai pas testé).</p>
<p><a title="Démo Repsonsive Web Design (Media Queries)" href="/demos/responsive_web_design_media_queries/" target="_blank" rel="noopener">Voir la page du tutoriel en ligne </a></p>
<p>Voila ce petit tutoriel est terminé, j’espère qu’il vous aura aidé. Il y a bien sûr beaucoup d’autres aspects des Media Queries que je n’ai pas abordé ici (comme la détection de l’orientation de l’écran par exemple) mais vous connaissez maintenant les bases de leur utilisation. Si vous voulez en savoir plus je vous conseille l’article d’Alsa Creation dont j’ai déjà donné le lien plus haut : <a href="http://www.alsacreations.com/article/lire/930-css3-media-queries.html" target="_blank" rel="noopener">Les Media Queries CSS3</a></p>
<p>L’article <a href="https://www.info-d-74.com/responsive-web-design-et-media-queries/">Responsive Web design et media queries</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.info-d-74.com/responsive-web-design-et-media-queries/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Utiliser WebGL avec CubicVR</title>
		<link>https://www.info-d-74.com/utiliser-webgl-avec-cubicvr/</link>
					<comments>https://www.info-d-74.com/utiliser-webgl-avec-cubicvr/#respond</comments>
		
		<dc:creator><![CDATA[info74]]></dc:creator>
		<pubDate>Thu, 06 Dec 2012 14:11:59 +0000</pubDate>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Tutoriaux]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[Cubic VR]]></category>
		<category><![CDATA[cubicvr]]></category>
		<category><![CDATA[webgl]]></category>
		<guid isPermaLink="false">https://www.info-d-74.com/?p=398</guid>

					<description><![CDATA[<p>Qu&#8217;est ce que WebGL ? WebGL, voila une des grandes nouveautés qu&#8217;amène HTML5 ! En effet WebGL permet de faire tourner des applications 3D dans votre navigateur sans installation préalable d&#8217;un quelconque plugin (Flash ou Java pour ne citer qu&#8217;eux). Démonstration WebGL (CubicVR) WebGL est donc un standard de HTML5 qui est déjà pris en [&#8230;]</p>
<p>L’article <a href="https://www.info-d-74.com/utiliser-webgl-avec-cubicvr/">Utiliser WebGL avec CubicVR</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Qu&rsquo;est ce que WebGL ?</h2>
<p>WebGL, voila une des grandes nouveautés qu&rsquo;amène HTML5 ! En effet WebGL permet de faire tourner des applications 3D dans votre navigateur sans installation préalable d&rsquo;un quelconque plugin (Flash ou Java pour ne citer qu&rsquo;eux).</p>
<p><a title="Démo WebGL + CubicVR (HTML5)" href="https://www.info-d-74.com/demos/webGL_CubicVR_HTML5/" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-786" src="https://www.info-d-74.com/wp-content/uploads/2015/12/webgl_cubicvr_html5_demo.jpg" alt="webgl_cubicvr_html5_demo" width="461" height="321" srcset="https://www.info-d-74.com/wp-content/uploads/2015/12/webgl_cubicvr_html5_demo.jpg 461w, https://www.info-d-74.com/wp-content/uploads/2015/12/webgl_cubicvr_html5_demo-300x209.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2015/12/webgl_cubicvr_html5_demo-215x150.jpg 215w, https://www.info-d-74.com/wp-content/uploads/2015/12/webgl_cubicvr_html5_demo-150x104.jpg 150w" sizes="(max-width: 461px) 100vw, 461px" /><br />
Démonstration WebGL (CubicVR)<br />
</a></p>
<p><span id="more-398"></span></p>
<p>WebGL est donc un standard de HTML5 qui est déjà pris en charge par de nombreux navigateurs.</p>
<h2>Compatibilité de WebGL</h2>
<p>Voici une démo que j&rsquo;ai réalisé et que nous allons mettre en place pas à pas dans ce tutoriel : <a title="Démo WebGL + CubicVR (HTML5)" href="https://www.info-d-74.com/demos/webGL_CubicVR_HTML5/" target="_blank" rel="noopener">https://www.info-d-74.com/demos/webGL_CubicVR_HTML5/</a></p>
<p>A noter que j&rsquo;ai réussi à la faire tourner uniquement dans Firefox (16.0.2) et Chrome (23.0.1271.95). Sous Opera l&rsquo;affichage ne se fait pas correctement (bug de textures) et Safari ne prend en charge WebGL qu&rsquo;à partir de la version 5.2 apparemment. Pour IE8, 9 et 10 il existe <a href="http://iewebgl.com/" target="_blank" rel="noopener">IEWebGL</a> qui permet la prise en charge de WebGL. Malheureusement sous IE8 il y a de nombreuses erreurs javascript lors du chargement des librairies <a title="CubicVR" href="https://github.com/cjcliffe/CubicVR.js/" target="_blank" rel="noopener">CubicVR</a> (peut être que cela fonctionne sous IE9 et 10, je n&rsquo;ai pas testé).</p>
<p>Un autre point important, <strong>WebGL est souvent désactiver par défaut</strong> : il vous faut l&rsquo;activer manuellement. Voici pour chaque navigateur les manipulations à faire :</p>
<ul>
<li>FireFox : taper <strong><em>about:config</em></strong> dans la barre d&rsquo;adresse, puis taper &lsquo;WebGL&rsquo; dans la barre de recherche. Mettez <strong>true</strong> à l&rsquo;option <strong>webgl.force-enabled</strong></li>
<li>Chrome : activé par défaut il me semble</li>
<li>Safari : allez dans les préférences puis &lsquo;Avancées&rsquo; et cocher &lsquo;Afficher le menu Développement&#8230;&rsquo;. Ensuite allez dans le <strong>menu &lsquo;Développement&rsquo;</strong> et cliquez sur <strong>&lsquo;Activer WebGL&rsquo;</strong></li>
<li>Opera : taper <strong><em>opera:config</em></strong> dans la barre d&rsquo;adresse, puis taper &lsquo;WebGL&rsquo; dans la barre de recherche. Mettez <strong>1</strong> à l&rsquo;option <strong>Enable WebGL</strong></li>
<li>Internet Explorer : installez <a title="IEWebGL" href="http://iewebgl.com/" target="_blank" rel="noopener">IEWebGL</a></li>
</ul>
<h2>Télécharger CubicVR</h2>
<p><a title="CubicVR" href="http://www.cubicvr.org/">CubicVR</a> est un moteur 3D disponible en Javascript et C++. Je le trouve simple d&rsquo;utilisation et puissant. Il propose de nombreuses possibilités :</p>
<ul>
<li>prise en charge des fichiers 3D Collada (<a title="Démos CubicVR" href="https://www.youtube.com/watch?v=JqmjK-4jh8M" target="_blank" rel="noopener">tuto pour plus d&rsquo;infos</a>)</li>
<li>gestion de la physique</li>
<li>prise en charge du bump mapping</li>
<li>etc&#8230;</li>
</ul>
<p>Nous allons donc l&rsquo;utiliser dans ce tutoriel pour réaliser la démo vu plus haut. Rendez-vous à cette adresse pour télécharger CubicVR : <a href="https://github.com/cjcliffe/CubicVR.js/">https://github.com/cjcliffe/CubicVR.js/</a></p>
<p>Dézipper le contenu de l&rsquo;archive. Vous pouvez tester les exemples présents dans le dossier samples. <strong>Attention pour fonctionner il faut placer les fichiers sur un serveur Web (local ou distant), si vous ouvrez le fichier directement depuis votre disque dur dans votre navigateur cela ne fonctionnera pas.</strong></p>
<h2>Charger CubiCVR</h2>
<p>Commençons par définir notre page HTML5 et chargeons CubicVR :</p>
<blockquote>
<pre>&lt;!DOCTYPE html&gt;
&lt;head&gt;
&lt;meta charset="UTF-8" /&gt;
&lt;script type="text/javascript" src="js/ammo.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="js/CubicVR.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
function webGLStart() {
  var gl = CubicVR.init();
  var canvas = CubicVR.getCanvas();
  var scene = new CubicVR.Scene(canvas.width, canvas.height, 80);
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body onLoad="CubicVR.start('auto',webGLStart);"&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</blockquote>
<p>On charge CubicVR et Ammo (qui servira pour la gestion de la physique) et on demande d&rsquo;initialiser WebGL au chargement de la page. Ensuite on définit la scène avec une caméra qui affichera la scène de la taille du canvas avec un champ vision de 80°.<br />
A ce stade si vous testez vous obtiendrez une page noir qui indique que CubicVR a bien initialisé un canvas WebGL sur toute la page.</p>
<h2>Afficher un sphère</h2>
<p>Nous allons maintenant ajouter une sphère à la scène. Ajoutez ce code après<em> var scene = new CubicVR.Scene(canvas.width,canvas.height, 80);</em> :</p>
<blockquote>
<pre>var sphereMat = new CubicVR.Material({
  color: [1.0, 0.2, 0]
});
var sphereMesh = new CubicVR.Mesh({
  primitive: {
    type: "sphere",
    radius: 1.5,
    lat: 60,
    lon: 60,
    material: sphereMat
  }, compile: true
});
var sphereObject = new CubicVR.SceneObject({mesh:sphereMesh, position:[0,0,0]});
scene.bindSceneObject(sphereObject);
scene.camera.position = [-10, 0, 0];
scene.camera.target = [0, 0, 0];

CubicVR.setGlobalAmbient([1.0,1.0,1.0]);
CubicVR.MainLoop(function(timer, gl) {
  scene.render();
});</pre>
</blockquote>
<p>On définit un matériau avec une couleur Orange pour la sphère ([1.0, 0.2, 0]).<br />
On crée ensuite la sphère avec un rayon de 1.5, latitude et longitude de 60 et on l&rsquo;ajoute à la scène en position 0, 0, 0. La caméra est ensuite placer en -10, 0, 0 et regarde vers la sphère (0, 0, 0). Enfin on définit une lumière ambiante blanche (sinon on ne verra rien&#8230;) et on spécifie affiche le rendu de la scène. Voilà le résultat que vous devez obtenir :</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-827" src="https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_webgl_cubicvr.jpg" alt="sphere_webgl_cubicvr" width="461" height="300" srcset="https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_webgl_cubicvr.jpg 461w, https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_webgl_cubicvr-300x195.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_webgl_cubicvr-231x150.jpg 231w, https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_webgl_cubicvr-150x98.jpg 150w" sizes="(max-width: 461px) 100vw, 461px" /></p>
<p>Ajoutons maintenant une texture pour rendre notre sphère plus jolie. Voici la texture que nous allons utiliser : <a href="demos/webGL_CubicVR_HTML5/textures/metal.png" target="_blank" rel="noopener">Texture metal</a></p>
<p>Modifions note code comme ceci :</p>
<blockquote>
<pre>var sphereMat = new CubicVR.Material({
  textures: {
    color: "textures/metal.png"
  }
});
var sphereMesh = new CubicVR.Mesh({
  primitive: {
    type: "sphere",
    radius: 1.5,
    lat: 60,
    lon: 60,
    material: sphereMat,
    uvmapper:  {
      projectionMode: CubicVR.enums.uv.projection.CUBIC,
      scale: [3, 3, 3]
    }
  }, compile: true
});</pre>
</blockquote>
<p>On donne donc notre texture au matériau au lieu d&rsquo;une simple couleur et on ajoute le paramètre <em>uvmapper</em> à la création de la sphère. Ce paramètre permet à CubicVR de savoir comment appliquer la texture sur l&rsquo;objet. A noter que pour une raison que j&rsquo;ignore le résultat est plus jolie avec le <em>projectionMode</em> en mode CUBIC plutôt que SPHERICAL (tester avec <em>CubicVR.enums.uv.projection.SPHERICAL</em> vous verrez). Modifiez le <em>scale</em> permet de changer la taille de la texture sur l&rsquo;objet. Voila le résultat :</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-826" src="https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_texture_webgl_cubicvr.jpg" alt="sphere_texture_webgl_cubicvr" width="460" height="300" srcset="https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_texture_webgl_cubicvr.jpg 460w, https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_texture_webgl_cubicvr-300x196.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_texture_webgl_cubicvr-230x150.jpg 230w, https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_texture_webgl_cubicvr-150x98.jpg 150w" sizes="(max-width: 460px) 100vw, 460px" /></p>
<h2>Afficher un sol et gérer la physique</h2>
<p>Ajoutons maintenant un sol au dessous de notre sphère. Voici la texture que nous allons utiliser : <a href="demos/webGL_CubicVR_HTML5/textures/carrelage.png" target="_blank" rel="noopener">Texture carrelage</a></p>
<p>Ajouter ce code après <em>scene.bindSceneObject(sphereObject);</em> :</p>
<blockquote>
<pre>var solMat = new CubicVR.Material({
  textures: {
    color: "textures/carrelage.png"
  },
});
var solUV = {
  projectionMode: "cubic",
  scale: [0.25, 1, 0.25]
};
var solMesh = new CubicVR.Mesh({
  primitive: {
    type: "box",
    size: 1.0,
    material: solMat,
    uvmapper: {
      projectionMode: "cubic",
      scale: [0.25, 1, 0.25]
    }
  },
  compile: true
});
var solObject = new CubicVR.SceneObject({mesh:solMesh, scale: [50, 1, 50], position:[0, -10, 0]});
scene.bindSceneObject(solObject);</pre>
</blockquote>
<p>De la même manière que pour la sphère nous créer le sol mais type box (boite). On lui définit une taille de 50x1x50 et on le place juste en dessous de la sphère (0, -10, 0). Le <em>scale</em> du <em>uvmapper</em> permet de réduire la texture  pour qu&rsquo;elle ne soit pas trop grande sur les axe x et z (0.25, 1, 0.25) :</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-825" src="https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_sol_webgl_cubicvr.jpg" alt="sphere_sol_webgl_cubicvr" width="460" height="300" srcset="https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_sol_webgl_cubicvr.jpg 460w, https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_sol_webgl_cubicvr-300x196.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_sol_webgl_cubicvr-230x150.jpg 230w, https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_sol_webgl_cubicvr-150x98.jpg 150w" sizes="(max-width: 460px) 100vw, 460px" /></p>
<p>Ajouter maintenant la gestion de la physique. Notre sphère devrait tomber sur le sol suivant la loi de la gravité. Voici comment faire (à ajouter juste après le code précédant) :</p>
<blockquote>
<pre>var physics = new CubicVR.ScenePhysics();

var rigidSphere = new CubicVR.RigidBody(sphereObject, {
  type: "dynamic",
  mass:400,
  collision: {
    type: "sphere",
    mesh: sphereMesh,
    radius: 1.5
  }
});
physics.bind(rigidSphere);

var rigidFloor = new CubicVR.RigidBody(solObject, {
  type: "static",
  mass: 0,
  collision: {
    type: "box",
    size: solObject.scale
  }
});
physics.bind(rigidFloor);</pre>
</blockquote>
<p>On définit pour la sphère un &lsquo;corps rigide&rsquo; dynamique (elle peut bouger), d&rsquo;une masse de 400 et son type de collision est <em>sphere</em>. Pour le sol c&rsquo;est pareil sauf qu&rsquo;il est statique (il ne bouge pas), qu&rsquo;il ne possède pas de masse et que son type de collision est de type <em>box. </em>Il ne reste plus qu&rsquo;a ajouter la prise en compte de la physique dans le <em>MainLoop</em> :</p>
<blockquote>
<pre>CubicVR.MainLoop(function(timer, gl) {
  physics.stepSimulation(timer.getLastUpdateSeconds());
  scene.render();
});</pre>
</blockquote>
<p>Si vous testez votre sphère doit tomber sur le sol.</p>
<h2>Dernière étape : mur de briques et cône</h2>
<p>Pour terminer nous allons ajouter un mur de brique et faire en sorte que la sphère aille taper dedans. Pour cela nous allons dévier sa trajectoire à l&rsquo;aide d&rsquo;un cône placé en dessous de la sphère.</p>
<p>Commençons déjà par créer notre mur de brique : <a href="demos/webGL_CubicVR_HTML5/textures/brique.png" target="_blank" rel="noopener">Texture brique</a><br />
Voila le code :</p>
<blockquote>
<pre>var WALL_WIDTH = 10;
var WALL_HEIGHT = 10;

var briqueMat = new CubicVR.Material({
  textures: {
    color: "textures/brique.png"
  }
});

var briqueMesh = new CubicVR.Mesh({
  primitive: {
    type: "box",
    size: 1.0,
    material: briqueMat,
    uvmapper: {
      projectionMode: CubicVR.enums.uv.projection.CUBIC,
      scale: [3, 1, 1]
    }
  },
  compile: true
});

for(var i=0; i&lt;WALL_WIDTH; i++)
{
  for(var j=0; j&lt;WALL_HEIGHT; j++)
  {
    var briqueObject = new CubicVR.SceneObject(briqueMesh);
    var briqueObj = new CubicVR.SceneObject({
      mesh: briqueMesh,
      scale: [1, 1, 3],
      position: [10, -9+i, j*3-13.5]
    });              
    scene.bindSceneObject(briqueObj);

    var rigidBox = new CubicVR.RigidBody(briqueObj, {
      type: "dynamic",
      mass:4,
      collision: {
        type: CubicVR.enums.collision.shape.BOX,
        mesh: briqueMesh,
        size: briqueObj.scale
      }
    });
    physics.bind(rigidBox);
  }
}</pre>
</blockquote>
<p>On crée un mur de 10&#215;10 briques derrière la sphère. Les briques ont une masse de 4 et sont soumises aux collisions. Ce qui veut dire que quand la sphère rentrera en collision elles vont subir la poussée de la sphère.</p>
<p>Il ne nous reste plus qu&rsquo;a créer notre cône pour dévier la sphère lorsqu&rsquo;elle tombe :</p>
<blockquote>
<pre>var coneMesh = new CubicVR.Mesh({
  primitive: {
    type: "cone",
    base: 6,
    height: 6,
    material: sphereMat,
    uvmapper: {
      projectionMode: "cubic",
      scale: [3, 3, 3]
    }
  },
  compile: true
});

var coneObject = new CubicVR.SceneObject({mesh:coneMesh, position:[-1,-7,0]});
scene.bindSceneObject(coneObject);

var rigidCone = new CubicVR.RigidBody(coneObject, {
  type: "static",
  mass:0,
  collision: {
    type: CubicVR.enums.collision.shape.CONE,
    radius: 6,
    height: 6,
    mesh: coneMesh
  }
});
physics.bind(rigidCone);</pre>
</blockquote>
<p>Le cône est défini comme static (il ne bougera pas). Voilà le résultat que nous obtenons :</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-824" src="https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_mur_webgl_cubicvr.jpg" alt="sphere_mur_webgl_cubicvr" width="640" height="400" srcset="https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_mur_webgl_cubicvr.jpg 640w, https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_mur_webgl_cubicvr-600x375.jpg 600w, https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_mur_webgl_cubicvr-300x188.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_mur_webgl_cubicvr-240x150.jpg 240w, https://www.info-d-74.com/wp-content/uploads/2015/12/sphere_mur_webgl_cubicvr-150x94.jpg 150w" sizes="(max-width: 640px) 100vw, 640px" /></p>
<p>Nous pouvons ajouter une dernière chose : la possibilité de tourner la caméra à la souris.<br />
Ajoutez simplement cette ligne à la fin :</p>
<blockquote>
<pre>mvc = new CubicVR.MouseViewController(canvas, scene.camera);</pre>
</blockquote>
<p>Voila nous en avons terminé avec ce tutoriel. J&rsquo;espère que j&rsquo;ai été assez clair dans les explications et que cela vous sera utile. N&rsquo;hésitez pas envoyer vos remarques.</p>
<p><strong>Ressources sur WebGL et CubicVR :</strong></p>
<ul>
<li>Éditeur de terrain : <a href="http://cjcliffe.github.com/CubicVR.js/experiment/landscape_editor/landscape_edit_500m.html" target="_blank" rel="noopener">http://cjcliffe.github.com/CubicVR.js/experiment/landscape_editor/landscape_edit_500m.html</a></li>
<li>Blog sur WebGl (en anglais) : <a href="http://learningwebgl.com/blog/" target="_blank" rel="noopener">http://learningwebgl.com/blog/</a></li>
<li>très bon tuto sur Blender et WebGL : <a title="Blender to WebGL" href="https://www.youtube.com/watch?v=JqmjK-4jh8M" target="_blank" rel="noopener">Blender to WebGL</a></li>
</ul>
<p>L’article <a href="https://www.info-d-74.com/utiliser-webgl-avec-cubicvr/">Utiliser WebGL avec CubicVR</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.info-d-74.com/utiliser-webgl-avec-cubicvr/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Utiliser la balise canvas pour lire une vidéo &#8211; HTML5</title>
		<link>https://www.info-d-74.com/utiliser-la-balise-canvas-pour-lire-une-video-html5/</link>
					<comments>https://www.info-d-74.com/utiliser-la-balise-canvas-pour-lire-une-video-html5/#respond</comments>
		
		<dc:creator><![CDATA[info74]]></dc:creator>
		<pubDate>Wed, 25 Jul 2012 14:25:27 +0000</pubDate>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Tutoriaux]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[filtre]]></category>
		<category><![CDATA[mp4]]></category>
		<category><![CDATA[vidéo]]></category>
		<category><![CDATA[webm]]></category>
		<guid isPermaLink="false">https://www.info-d-74.com/?p=279</guid>

					<description><![CDATA[<p>La balise video de HTML permet de lire directement une vidéo dans le navigateur. Une autre possibilité que propose HTML5 est de lire une vidéo dans un &#60;canvas&#62;. Cela peut avoir plusieurs avantages : modification de l&#8217;affichage (taille, découpe, etc&#8230;), ajout d&#8217;informations en surimpression de la vidéo, de filtres de couleurs, lecture de plusieurs vidéo [&#8230;]</p>
<p>L’article <a href="https://www.info-d-74.com/utiliser-la-balise-canvas-pour-lire-une-video-html5/">Utiliser la balise canvas pour lire une vidéo &#8211; HTML5</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>La balise video de HTML permet de lire directement une vidéo dans le navigateur. Une autre possibilité que propose HTML5 est de lire une vidéo dans un &lt;canvas&gt;. Cela peut avoir plusieurs avantages : modification de l&rsquo;affichage (taille, découpe, etc&#8230;), ajout d&rsquo;informations en surimpression de la vidéo, de filtres de couleurs, lecture de plusieurs vidéo dans une seule balise &lt;canvas&gt;, etc&#8230;</p>
<p><a href="https://www.info-d-74.com/demos/video_canvas_HTML5/" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-799" src="https://www.info-d-74.com/wp-content/uploads/2015/12/demo_video_canvas_HTML5.jpg" alt="demo_video_canvas_HTML5" width="621" height="384" srcset="https://www.info-d-74.com/wp-content/uploads/2015/12/demo_video_canvas_HTML5.jpg 621w, https://www.info-d-74.com/wp-content/uploads/2015/12/demo_video_canvas_HTML5-600x371.jpg 600w, https://www.info-d-74.com/wp-content/uploads/2015/12/demo_video_canvas_HTML5-300x186.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2015/12/demo_video_canvas_HTML5-243x150.jpg 243w, https://www.info-d-74.com/wp-content/uploads/2015/12/demo_video_canvas_HTML5-150x93.jpg 150w" sizes="(max-width: 621px) 100vw, 621px" /></a></p>
<p><span id="more-452"></span></p>
<p>C&rsquo;est ce que nous allons voir dans ce tutoriel. La première étape va être de définir le code HTML et CSS de base :</p>
<blockquote>
<pre>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;style&gt;
    body {
      height: 100%;
      width: 100%;
    }
    #color {
      width: 80px;
    }
    #opacity {
      width: 30px;
    }
  &lt;/style&gt;
  &lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"&gt;&lt;/script&gt;  
&lt;/head&gt;
&lt;body&gt;      
    &lt;canvas width="600" height="320" id="video"&gt;
      Votre navigateur ne supporte pas la balise canvas
    &lt;/canvas&gt;
    &lt;div id="bar"&gt;
      &lt;input type="checkbox" id="filter" /&gt; Filtre : &lt;input type="text" value="255, 0, 0" id="color_filter" /&gt; (opacity : &lt;input type="text" value="0.3" id="opacity_filter" /&gt;)&lt;br /&gt;
      &lt;input type="checkbox" id="bruit" /&gt; Bruit : &lt;input type="text" value="0, 0, 0" id="color_bruit" /&gt; (opacity : &lt;input type="text" value="0.7" id="opacity_bruit" /&gt;)
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</blockquote>
<p>On a donc uniquement une balise canvas qui va servir à lire notre vidéo puis un div où on va définir 2 options de surimpression pour la vidéo : un filtre de couleur et du bruit.</p>
<p>Maintenant nous allons instancier un élément &lt;video&gt; et la lire :</p>
<blockquote>
<pre>var video = document.createElement('video');
video.width = 600; video.height = 320;
$(video).html('&lt;source src="../video_HTML5/video.webm" type="video/webm" /&gt;&lt;source src="../video_HTML5/video.mp4" type="video/mp4" /&gt;');
video.volume = 0;
video.play();</pre>
</blockquote>
<p>On définit donc la vidéo avec sa taille et 2 sources pour être compatible avec la plupart des navigateurs (<a title="Vidéo d'exemple webm" href="https://www.info-d-74.com/demos/video_HTML5/video.webm" target="_blank" rel="noopener">webm</a> et <a title="Vidéo d'exemple mp4" href="https://www.info-d-74.com/demos/video_HTML5/video.mp4" target="_blank" rel="noopener">mp4</a>). Ensuite on rend la vidéo muette en mettant le volume a 0 et on lance la lecture. A ce stade notre vidéo n&rsquo;est pas affiché puisque notre élément video n&rsquo;est pas intégré à la page. Ce que nous voulons c&rsquo;est que la lecture s&rsquo;affiche dans le canvas donc :</p>
<blockquote>
<pre>var ctx = $('#video')[0].getContext('2d');
setInterval(video_to_canvas, 30);

function video_to_canvas()
{         
  ctx.drawImage(video, 0, 0, video.width, video.height);
}</pre>
</blockquote>
<p>On récupère le context du canvas pour dessiner dedans et on défini un appel à la fonction video_to_canvas toutes les 30 millisecondes.<br />
Cette fonction va dessiner l&rsquo;image courante de la vidéo dans la canvas.</p>
<p>Ajoutons maintenant les 2 fonctionnalités donc nous avons parlé tout à l&rsquo;heure : un filtre de couleur et du bruit . Nous avons défini ce code HTML tout à l&rsquo;heure :</p>
<blockquote>
<pre>&lt;div id="bar"&gt;
  &lt;input type="checkbox" id="filter" /&gt; Filter : &lt;input type="text" value="255, 0, 0" id="color_filter" /&gt; (opacity : &lt;input type="text" value="0.3" id="opacity_filter" /&gt;)&lt;br /&gt;
  &lt;input type="checkbox" id="bruit" /&gt; Bruit : &lt;input type="text" value="0, 0, 0" id="color_bruit" /&gt; (opacity : &lt;input type="text" value="0.7" id="opacity_bruit" /&gt;)
&lt;/div&gt;</pre>
</blockquote>
<p>Nous avons pour chacune des fonctionnalités 3 champs : 1 case à cocher (fonction activée ou non), 2 champs texte (couleur et opacité). Modifions donc maintenant la fonction<em> video_to_canvas</em> de tout à l&rsquo;heure pour prendre en compte ces champs et leurs valeurs :</p>
<blockquote>
<pre>function video_to_canvas()
{         
  ctx.drawImage(video, 0, 0, video.width, video.height);
  if($('#filter:checked').length &gt; 0)
  {
    ctx.fillStyle = 'rgba('+$('#color_filter').val()+', '+$('#opacity_filter').val()+')';
    ctx.fillRect(0,0,video.width,video.height);
  }
  if($('#bruit:checked').length &gt; 0)
  {
    for(var i=0; i&lt;300; i++)
    {
      ctx.fillStyle = 'rgba('+$('#color_bruit').val()+', '+$('#opacity_bruit').val()+')';
      ctx.fillRect(Math.random()*video.width,Math.random()*video.height,1,2);
    }
  }
}</pre>
</blockquote>
<ul>
<li>On dessine un rectangle de la couleur et de l&rsquo;opacité choisis sur toutes la taille du canvas si le filtre est activé</li>
<li>On ajoute 300 « petits points de bruit » de la couleur et de l&rsquo;opacité choisis à des emplacement aléatoire dans le canvas</li>
</ul>
<p>Voila c&rsquo;est terminé pour ce tuto ! A vous maintenant d&rsquo;imaginer d&rsquo;autres fonctionnalités avec les possibilités offertes par HTML5&#8230;</p>
<p><a title="HTML5 – Lire une vidéo dans une balise canvas" href="https://www.info-d-74.com/demos/video_canvas_HTML5/" target="_blank" rel="noopener">Démonstration video et canvas HTML5</a> &#8211; <a title="ZIp du tuto (HTML5 – Lire une vidéo dans une balise canvas)" href="https://www.info-d-74.com/demos/video_canvas_HTML5/HTML5-video-canvas.zip" target="_blank" rel="noopener">Télécharger le ZIP du tutoriel</a></p>
<p>L’article <a href="https://www.info-d-74.com/utiliser-la-balise-canvas-pour-lire-une-video-html5/">Utiliser la balise canvas pour lire une vidéo &#8211; HTML5</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.info-d-74.com/utiliser-la-balise-canvas-pour-lire-une-video-html5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://www.info-d-74.com/demos/video_HTML5/video.webm" length="2348204" type="application/wordperfect" />
<enclosure url="https://www.info-d-74.com/demos/video_HTML5/video.mp4" length="5137944" type="video/mp4" />

			</item>
		<item>
		<title>HTML5 &#8211; Utiliser le localStorage</title>
		<link>https://www.info-d-74.com/html5-utiliser-le-localstorage/</link>
					<comments>https://www.info-d-74.com/html5-utiliser-le-localstorage/#respond</comments>
		
		<dc:creator><![CDATA[info74]]></dc:creator>
		<pubDate>Thu, 19 Jul 2012 09:20:41 +0000</pubDate>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Tutoriaux]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[local storage]]></category>
		<category><![CDATA[localStorage]]></category>
		<guid isPermaLink="false">https://www.info-d-74.com/?p=228</guid>

					<description><![CDATA[<p>Une autre nouveauté proposé par le HTML5 va faire l&#8217;objet de ce tutoriel : le localStorage et le sessionStorage Définition et utilité Le localStorage et le sessionStorage permettent de faire sensiblement la même chose : stocker des données directement dans le navigateur, donc coté client. La différence entre les 2 est la même qu&#8217;il existe [&#8230;]</p>
<p>L’article <a href="https://www.info-d-74.com/html5-utiliser-le-localstorage/">HTML5 &#8211; Utiliser le localStorage</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Une autre nouveauté proposé par le HTML5 va faire l&rsquo;objet de ce tutoriel : <strong>le localStorage et le sessionStorage</strong></p>
<h2>Définition et utilité</h2>
<p>Le localStorage et le sessionStorage permettent de faire sensiblement la même chose : stocker des données directement dans le navigateur, donc coté client. La différence entre les 2 est la même qu&rsquo;il existe entre les cookies et les variables sessions : les données enregistrées avec le localStorage persistent à la fermeture du navigateur alors qu&rsquo;avec sessionStorage elles seront détruites.</p>
<p><span id="more-451"></span></p>
<p>Cette fonctionnalité peut être très utile pour plusieurs raisons :</p>
<ul>
<li>accélérer la rapidité d’exécution : tout ce qui est dans le localStorage n&rsquo;est pas à recharger en ligne (très utiles pour les applications web mobile)</li>
<li>permettre d&rsquo;avoir une quantité de stockage plus grande qu&rsquo;avec les cookies (4Ko maximum). Apparemment la limite de poids du localStorage serait de 5Mo par domaine pour la plupart des navigateurs (à vérifier)</li>
<li>permettre l&rsquo;utilisation d&rsquo;une application web hors ligne grâce aux informations stockées en local</li>
</ul>
<h2>Fonctionnement de l&rsquo;API</h2>
<p>L&rsquo;utilisation de localStorage et sessionStorage est très simple.</p>
<h3>Enregistrer des données :</h3>
<blockquote>
<pre>localStorage.setItem('key', data);</pre>
</blockquote>
<p>ou</p>
<blockquote>
<pre>sessionStorage.setItem('key', data);</pre>
</blockquote>
<h3>Lire des données :</h3>
<blockquote>
<pre>var data = localStorage.getItem('key');</pre>
</blockquote>
<p>ou</p>
<blockquote>
<pre>var data = sessionStorage.getItem('key');</pre>
</blockquote>
<h3>Effacer des données :</h3>
<blockquote>
<pre>localStorage.removeItem('key');</pre>
</blockquote>
<p>ou</p>
<blockquote>
<pre>sessionStorage.removeItem('key');</pre>
</blockquote>
<h3>Parcourir toutes les données stockées</h3>
<blockquote>
<pre>var size = localStorage.length;
for(var i=0; i &lt;size; i++)
{
  alert(localStorage.key(i);
}</pre>
</blockquote>
<p>Vous savez maintenant comment utiliser localStorage et sessionStorage.<br />
J&rsquo;ai mis en ligne cette petite démo pour voir le fonctionnement en live : <a title="Exemple d'utilisation du localStoagre HTML5" href="https://www.info-d-74.com/demos/HTML5_localStorage/index.html" target="_blank" rel="noopener">Démonstration d&rsquo;utilisation localStorage</a></p>
<h2>Accéder au localStorage depuis le navigateur</h2>
<p>Pour terminer voici quelques astuces permettant d&rsquo;accéder aux informations stockées dans le localStorage depuis les différents navigateurs du marché.</p>
<h3><a href="https://www.info-d-74.com/wp-content/uploads/2012/07/firefox.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-249 title_img" title="firefox" src="https://www.info-d-74.com/wp-content/uploads/2012/07/firefox.jpg" alt="Firefox" width="32" height="32" /></a>Firefox</h3>
<p>Sous Firefox vous pouvez consulter les données contenues dans le localStorage via l&rsquo;extension Firebug. Ouvrez Firebug et tapez localStorage dans la console :<br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-865" src="https://www.info-d-74.com/wp-content/uploads/2012/07/firebug_localStorage_HTML5.jpg" alt="firebug_localStorage_HTML5" width="639" height="269" srcset="https://www.info-d-74.com/wp-content/uploads/2012/07/firebug_localStorage_HTML5.jpg 639w, https://www.info-d-74.com/wp-content/uploads/2012/07/firebug_localStorage_HTML5-600x253.jpg 600w, https://www.info-d-74.com/wp-content/uploads/2012/07/firebug_localStorage_HTML5-300x126.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2012/07/firebug_localStorage_HTML5-250x105.jpg 250w, https://www.info-d-74.com/wp-content/uploads/2012/07/firebug_localStorage_HTML5-150x63.jpg 150w" sizes="(max-width: 639px) 100vw, 639px" /></p>
<h3><img loading="lazy" decoding="async" class="alignnone size-full wp-image-864" src="https://www.info-d-74.com/wp-content/uploads/2012/07/chrome.jpg" alt="chrome" width="32" height="32" />Chrome</h3>
<p>Sous Chrome vous pouvez directement accéder au localStorage en passant par le menu Outils =&gt; Outils de développement, puis dans la fenêtre qui s&rsquo;ouvre en bas de page =&gt; Ressources puis localStorage :<br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-863" src="https://www.info-d-74.com/wp-content/uploads/2012/07/chrome_localStorage_HTML5.jpg" alt="chrome_localStorage_HTML5" width="640" height="270" srcset="https://www.info-d-74.com/wp-content/uploads/2012/07/chrome_localStorage_HTML5.jpg 640w, https://www.info-d-74.com/wp-content/uploads/2012/07/chrome_localStorage_HTML5-600x253.jpg 600w, https://www.info-d-74.com/wp-content/uploads/2012/07/chrome_localStorage_HTML5-300x127.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2012/07/chrome_localStorage_HTML5-250x105.jpg 250w, https://www.info-d-74.com/wp-content/uploads/2012/07/chrome_localStorage_HTML5-150x63.jpg 150w" sizes="(max-width: 640px) 100vw, 640px" /></p>
<h3><img loading="lazy" decoding="async" class="alignnone size-full wp-image-862" src="https://www.info-d-74.com/wp-content/uploads/2012/07/opera.jpg" alt="opera" width="32" height="32" />Opera</h3>
<p>Sur Opera il suffit de taper dans la barre d&rsquo;adresse <a title="LocalStorage Opera" href="webstorage" target="_blank" rel="noopener">opera:webstorage</a> pour accéder au différents sites ayant stocké des données en local. Vous pouvez également modifier certaines paramètres :<br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-861" src="https://www.info-d-74.com/wp-content/uploads/2012/07/opera_locaStorage_HTML5.jpg" alt="opera_locaStorage_HTML5" width="585" height="299" srcset="https://www.info-d-74.com/wp-content/uploads/2012/07/opera_locaStorage_HTML5.jpg 585w, https://www.info-d-74.com/wp-content/uploads/2012/07/opera_locaStorage_HTML5-300x153.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2012/07/opera_locaStorage_HTML5-250x128.jpg 250w, https://www.info-d-74.com/wp-content/uploads/2012/07/opera_locaStorage_HTML5-150x77.jpg 150w" sizes="(max-width: 585px) 100vw, 585px" /></p>
<h3><img loading="lazy" decoding="async" class="alignnone size-full wp-image-860" src="https://www.info-d-74.com/wp-content/uploads/2012/07/safari.jpg" alt="safari" width="32" height="32" />Safari</h3>
<p>Sur Safari il faut d&rsquo;abord activer les Outils développeur dans Préférences =&gt; Avancées :<br />
<a href="https://www.info-d-74.com/wp-content/uploads/2012/07/safaria_activation_outils_dev.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-244" title="safari_activation_outils_dev" src="https://www.info-d-74.com/wp-content/uploads/2012/07/safaria_activation_outils_dev.jpg" alt="Safari activation outils développeur" width="584" height="311" /></a></p>
<p>Ensuite faites un clic droit n&rsquo;importe où dans la page puis choisissiez « Inspecter l&rsquo;élément ». Vous allez retrouver exactement la même interface que sous Chrome :<br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-863" src="https://www.info-d-74.com/wp-content/uploads/2012/07/chrome_localStorage_HTML5.jpg" alt="chrome_localStorage_HTML5" width="640" height="270" srcset="https://www.info-d-74.com/wp-content/uploads/2012/07/chrome_localStorage_HTML5.jpg 640w, https://www.info-d-74.com/wp-content/uploads/2012/07/chrome_localStorage_HTML5-600x253.jpg 600w, https://www.info-d-74.com/wp-content/uploads/2012/07/chrome_localStorage_HTML5-300x127.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2012/07/chrome_localStorage_HTML5-250x105.jpg 250w, https://www.info-d-74.com/wp-content/uploads/2012/07/chrome_localStorage_HTML5-150x63.jpg 150w" sizes="(max-width: 640px) 100vw, 640px" /></p>
<h3><img loading="lazy" decoding="async" class="alignnone size-full wp-image-858" src="https://www.info-d-74.com/wp-content/uploads/2012/07/internet_explorer_8.jpg" alt="internet_explorer_8" width="32" height="32" />Internet Explorer</h3>
<p>Sous Internet Explorer (version 8) il n&rsquo;est apparemment pas possible d&rsquo;afficher directement le contenu du localStorage (du moins je n&rsquo;ai pas trouver). J&rsquo;ai donc fouiller un peu dans les dossiers de mon disque dur pour savoir où Internet Explorer enregistrait ces informations. Elles se trouvent dans <em>C:Documents and SettingsLOGINLocal SettingsApplication DataMicrosoftInternet ExplorerDOMStore</em>. Vous trouverez à cette emplacement des sous dossiers et dans chacun de ses sous dossiers un fichier XML pour chaque domaine contenant les informations du localStorage stockées pour chaque site :<br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-857" src="https://www.info-d-74.com/wp-content/uploads/2012/07/localStorage_HTML5_internet_explorer.jpg" alt="localStorage_HTML5_internet_explorer" width="640" height="400" srcset="https://www.info-d-74.com/wp-content/uploads/2012/07/localStorage_HTML5_internet_explorer.jpg 640w, https://www.info-d-74.com/wp-content/uploads/2012/07/localStorage_HTML5_internet_explorer-600x375.jpg 600w, https://www.info-d-74.com/wp-content/uploads/2012/07/localStorage_HTML5_internet_explorer-300x188.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2012/07/localStorage_HTML5_internet_explorer-240x150.jpg 240w, https://www.info-d-74.com/wp-content/uploads/2012/07/localStorage_HTML5_internet_explorer-150x94.jpg 150w" sizes="(max-width: 640px) 100vw, 640px" /></p>
<p>Voila vous avez désormais toutes les informations vous permettant d&rsquo;utiliser localStorage et sessionStorage dans vos sites et application web.</p>
<p>L’article <a href="https://www.info-d-74.com/html5-utiliser-le-localstorage/">HTML5 &#8211; Utiliser le localStorage</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.info-d-74.com/html5-utiliser-le-localstorage/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Réaliser un lecteur vidéo HTML5 personnalisé</title>
		<link>https://www.info-d-74.com/realiser-un-lecteur-video-html5-personnalise/</link>
					<comments>https://www.info-d-74.com/realiser-un-lecteur-video-html5-personnalise/#comments</comments>
		
		<dc:creator><![CDATA[info74]]></dc:creator>
		<pubDate>Tue, 17 Jul 2012 13:33:48 +0000</pubDate>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Tutoriaux]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[ie9]]></category>
		<category><![CDATA[inernet explorer 9]]></category>
		<category><![CDATA[lecteur]]></category>
		<category><![CDATA[mp4]]></category>
		<category><![CDATA[ogv]]></category>
		<category><![CDATA[opera]]></category>
		<category><![CDATA[safari]]></category>
		<category><![CDATA[vidéo]]></category>
		<category><![CDATA[webm]]></category>
		<guid isPermaLink="false">https://www.info-d-74.com/?p=179</guid>

					<description><![CDATA[<p>Dans ce tutoriel nous allons voir comment réaliser un lecteur vidéo HTML5 personnalisé : voir la démonstration La balise HTML5 &#60;video&#62; permet la lecture de vidéos directement sans installation de plugins/codecs. La plupart des navigateurs propose un lecteur prédéfini mais il peut être intéressant de le personnaliser en fonction du design du site dans lequel [&#8230;]</p>
<p>L’article <a href="https://www.info-d-74.com/realiser-un-lecteur-video-html5-personnalise/">Réaliser un lecteur vidéo HTML5 personnalisé</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Dans ce tutoriel nous allons voir comment réaliser un lecteur vidéo HTML5 personnalisé : <a title="Démonstration lecteur vidéo HTML5 personnalisé" href="https://www.info-d-74.com/demos/video_HTML5/" target="_blank" rel="noopener">voir la démonstration</a></p>
<p><a href="https://www.info-d-74.com/demos/video_HTML5/" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-869" src="https://www.info-d-74.com/wp-content/uploads/2012/07/demonstration_lecteur_video_HTML5.jpg" alt="demonstration_lecteur_video_HTML5" width="830" height="519" srcset="https://www.info-d-74.com/wp-content/uploads/2012/07/demonstration_lecteur_video_HTML5.jpg 830w, https://www.info-d-74.com/wp-content/uploads/2012/07/demonstration_lecteur_video_HTML5-600x375.jpg 600w, https://www.info-d-74.com/wp-content/uploads/2012/07/demonstration_lecteur_video_HTML5-300x188.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2012/07/demonstration_lecteur_video_HTML5-240x150.jpg 240w, https://www.info-d-74.com/wp-content/uploads/2012/07/demonstration_lecteur_video_HTML5-150x94.jpg 150w" sizes="(max-width: 830px) 100vw, 830px" /></a></p>
<p><span id="more-450"></span></p>
<p>La balise HTML5 &lt;video&gt; permet la lecture de vidéos directement sans installation de plugins/codecs. La plupart des navigateurs propose un lecteur prédéfini mais il peut être intéressant de le personnaliser en fonction du design du site dans lequel on va l&rsquo;intégrer. En effet il peut y avoir des différences de couleurs/formes suivant le navigateur utilisé comme montré ci-dessous :</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-815" src="https://www.info-d-74.com/wp-content/uploads/2015/12/lecteurs_videos_HTML5.jpg" alt="lecteurs_videos_HTML5" width="804" height="137" srcset="https://www.info-d-74.com/wp-content/uploads/2015/12/lecteurs_videos_HTML5.jpg 804w, https://www.info-d-74.com/wp-content/uploads/2015/12/lecteurs_videos_HTML5-600x102.jpg 600w, https://www.info-d-74.com/wp-content/uploads/2015/12/lecteurs_videos_HTML5-300x51.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2015/12/lecteurs_videos_HTML5-250x43.jpg 250w, https://www.info-d-74.com/wp-content/uploads/2015/12/lecteurs_videos_HTML5-150x26.jpg 150w" sizes="(max-width: 804px) 100vw, 804px" /><br />
<em>Rendus des lecteurs vidéos HTML5 par défaut sous Firefox, Chrome et Opera</em></p>
<h2>Formats vidéo</h2>
<p>Avant d&rsquo;attaquer le tutoriel nous allons un peu parler des différents formats vidéos qui peuvent être utilisé pour la balise &lt;video&gt;. Ils sont au nombre de 3 : <strong>le Webm, le MP4, le OGV.</strong> Il est essentiel d&rsquo;avoir au moins <strong>2 de ces formats vidéo différents</strong> pour que la vidéo puisse être lue sur tous les navigateurs :</p>
<ul>
<li>soit webm et MP4</li>
<li>soit OGV et MP4</li>
</ul>
<p>En effet Webm et OGV peuvent être lu sur Firefox, Opera et Google Chrome alors que Safari et Internet Explorer 9 supporte uniquement le MP4. C&rsquo;est un des inconvénient pour le moment du HTML5 pour lire des vidéo : la nécessité d&rsquo;avoir 2 formats différents.</p>
<p>Voici les liens pour télécharger la vidéo de démo que nous allons utiliser (format webm et MP4) : <a title="Vidéo démo HTML5 webm" href="https://www.info-d-74.com/demos/video_HTML5/video.webm" target="_blank" rel="noopener">Télécharger la vidéo WEBM</a> &#8211; <a title="Vidéo démo HTML5 MP4" href="https://www.info-d-74.com/demos/video_HTML5/video.mp4" target="_blank" rel="noopener">Télécharger la vidéo MP4</a></p>
<p>Pour que votre serveur web reconnaisse ces formats il faut ajouter un fichier <em>.htaccess</em> à la racine de votre dossier avec ces 3 lignes :</p>
<blockquote>
<pre>AddType video/mp4 .mp4
AddType video/webm .webm
AddType video/ogg .ogv</pre>
</blockquote>
<p>Cela permettra à votre serveur web d&rsquo;envoyer au navigateur les types MIME corrects pour les fichiers webm, mp4 et ogv. Ceci fait nous pouvons passer à proprement parlé au tutoriel.</p>
<h2>Intégration HTML/CSS</h2>
<p>Commençons par définir le code HTML de base pour l’intégration de la vidéo :</p>
<blockquote>
<pre>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div id="content"&gt;
    &lt;video width="800" type="video/webm"&gt;
      &lt;source src="video.webm" type="video/webm" /&gt;
      &lt;source src="video.mp4" type="video/mp4" /&gt;
      Votre navigateur ne supporte pas la balise HTML5 vidéo
    &lt;/video&gt;
    &lt;div id="controls"&gt;
      &lt;img src="img/fullscreen.png" id="fullscreen" alt="&lt;&gt;" /&gt;
      &lt;img src="img/play.png" id="play" alt="&gt;" /&gt;
      &lt;img src="img/pause.png" id="pause" alt"||" /&gt;
      &lt;img src="img/stop.png" id="stop" alt="S" /&gt;
      &lt;div id="time"&gt;&lt;/div&gt;&lt;img src="img/volume.png" id="btn_volume" alt="V" /&gt;
      &lt;div id="volume"&gt;&lt;/div&gt;
    &lt;/div&gt;  
  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</blockquote>
<p>Et le minimum de CSS pour que le tout s&rsquo;affiche correctement :</p>
<blockquote>
<pre>#content {
  width: 800px;
  margin-left: auto;
  margin-right: auto;
  text-align: left;
}

#video {
  z-index: 1;
}

#controls {
  position: relative;
  z-index: 2;
  background: #ccc;
  padding: 3px;
}

#time {
  width: 505px;
  display: inline-block;
}

#btn_volume {
  margin-left: 5px;
}

#volume {
  float: right;
  width: 100px;
  margin-top: 12px;
}

#fullscreen {
  float: right;
  margin-left: 15px;
  margin-top: 5px;
}</pre>
</blockquote>
<p>Voici les différentes fonctionnalités que nous allons mettre en place pour notre lecteur :</p>
<ul>
<li>un bouton lecture</li>
<li>un bouton pause</li>
<li>un bouton stop</li>
<li>une barre de progression</li>
<li>un réglage du volume</li>
<li>un bouton pour passer en plein écran</li>
</ul>
<p>C&rsquo;est à ça que va servir tout ce qui est dans le <em>&lt;div id= »controls »&gt;</em> :</p>
<blockquote>
<pre>&lt;div id="controls"&gt;
  &lt;img src="img/fullscreen.png" id="fullscreen" alt="&lt;&gt;" /&gt;
  &lt;img src="img/play.png" id="play" alt="&gt;" /&gt;
  &lt;img src="img/pause.png" id="pause" alt"||" /&gt;
  &lt;img src="img/stop.png" id="stop" alt="S" /&gt;
  &lt;div id="time"&gt;&lt;/div&gt;&lt;img src="img/volume.png" id="btn_volume" alt="V" /&gt;
&lt;div id="volume"&gt;&lt;/div&gt;</pre>
</blockquote>
<p>Les 4 images sont les 4 boutons lecture, pause, stop et plein écran, le <em>&lt;div&gt;</em> avec l&rsquo;id <em>time</em> servira pour la barre de progression, l&rsquo;image et le dernier <em>&lt;div&gt;</em> pour le réglage du volume. <a title="Icones pour lecteurs HTML5" href="https://www.info-d-74.com/wp-content/uploads/2012/07/icones.zip" target="_blank" rel="noopener">Télécharger les icônes utilisées dans la démo</a></p>
<h2>Ajoute de librairies JavaScript</h2>
<p>Nous allons ajouter les librairies JQuery et JQuery UI, qui nous utiliserons par la suite, notamment pour réaliser la barre de progression de la vidéo ainsi que le régleur de volume. Voici le code à ajouter dans le &lt;head&gt; :</p>
<blockquote>
<pre>&lt;link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/&gt;
&lt;script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"&gt;&lt;/script&gt;
&lt;script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"&gt;&lt;/script&gt;</pre>
</blockquote>
<p>Donc les 2 librairies JQuery et JQuery UI plus la feuille de styles propre à JQuery UI.</p>
<h2>Réalisation des fonctionnalités de lecture avec Javascript/JQuery</h2>
<p>Maintenant que tout est prêt commençons par réaliser les 3 fonctions de bases : lecture, pause et stop. Ajoutez ce code dans le <em>&lt;head&gt;</em> après les 3 fichiers que nous avons inclut tout à l&rsquo;heure :</p>
<blockquote>
<pre>&lt;script&gt;
$(document).ready(function(){
  //joue la vidéo
  $("#play").click(function(){
    $('video')[0].play();
  });

  //met en pause la vidéo
  $("#pause").click(function(){
    $('video')[0].pause();
  });

  //stop la vidéo
  $("#stop").click(function(){
    $('video')[0].pause();
    $('video')[0].currentTime = 0;
  });
});
&lt;/script&gt;</pre>
</blockquote>
<p>Donc pour chaque bouton on effectue l&rsquo;action correspondante lorsque l&rsquo;événement click est déclenché :</p>
<ul>
<li>pour lancer la lecture on appelle la méthode <em>play</em> sur la vidéo</li>
<li>pour mettre en pause on appelle la méthode <em>pause</em> sur la vidéo</li>
<li>pour stopper il n&rsquo;existe pas de méthode <em>stop</em>. Il faut appeler la méthode <em>pause</em> et remettre la vidéo au début : <em>currentTime = 0</em></li>
</ul>
<p>Vous pouvez testez dans votre navigateur que vos 3 boutons fonctionnent correctement.</p>
<p>Passons maintenant à la barre de progression de la vidéo. Celle-ci doit avancer en même temps que la vidéo se lit et être cliquable pour l&rsquo;internaute puisse atteindre directement le moment voulu.</p>
<p>Nous allons utiliser pour ce faire le plugin <em>Progress Bar</em> fournit par la librairie <em>JQuery UI</em>. Ce plugin permet comme son nom l&rsquo;indique de créer une barre de progression. Voici le code pour l&rsquo;initialiser (à placer dans le <em>$(document).ready</em>) :</p>
<blockquote>
<pre>$("#time").progressbar();</pre>
</blockquote>
<p>Voila notre barre de progression est créer. Il faut maintenant la synchroniser avec la vidéo. Mettons donc en place une petite fonction que nous nommerons <em>setTime </em>et qui se chargera de faire avancer la barre de progression (à placer avant <em>$(document).ready</em>) :</p>
<blockquote>
<pre>function setTime() {
  $("#time").progressbar({ value: $('video')[0].currentTime*100/$('video')[0].duration });
}</pre>
</blockquote>
<p>On récupère où en est la vidéo (<em>currentTime</em>) et on ramène en pourcentage par rapport à la durée totale de la vidéo : <em>duration</em></p>
<p>Maintenant il ne nous reste plus qu&rsquo;a appeler cette fonction régulièrement pour que la barre de progression reste synchronisée avec la vidéo. Il suffit de rajouter cette ligne dans <em>$(« #play »).click</em> :</p>
<blockquote>
<pre> setInterval("setTime()", 10);</pre>
</blockquote>
<p>On appelle la fonction <em>setTime()</em> toutes les 10 millisecondes, ainsi la barre de progression reste tout le temps en phase avec la vidéo.</p>
<p>Maintenant il faudrait que lorsque l&rsquo;internaute se déplace dans la barre de progression la vidéo fasse de même. C&rsquo;est la partie la plus complexe à réaliser&#8230; En effet lorsque l&rsquo;utilisateur va cliquer dans la barre de progression on ne va pas pouvoir directement récupérer une valeur entre 0 et 100 qui nous indiquerait à quel endroit lire la vidéo : on va récupérer la distance en pixels entre le bord de la fenêtre du navigateur et la position du curseur de la souris. Un petit schéma pour mieux comprendre :<br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-789" src="https://www.info-d-74.com/wp-content/uploads/2015/12/x_progressbar.jpg" alt="x_progressbar" width="459" height="177" srcset="https://www.info-d-74.com/wp-content/uploads/2015/12/x_progressbar.jpg 459w, https://www.info-d-74.com/wp-content/uploads/2015/12/x_progressbar-300x116.jpg 300w, https://www.info-d-74.com/wp-content/uploads/2015/12/x_progressbar-250x96.jpg 250w, https://www.info-d-74.com/wp-content/uploads/2015/12/x_progressbar-150x58.jpg 150w" sizes="(max-width: 459px) 100vw, 459px" /><br />
On va récupérer la distance rouge (distance bord de la fenêtre &#8211; curseur). La valeur qui nous intéresse c&rsquo;est la verte (distance bord de la barre &#8211; curseur). Il faut donc faire rouge moins bleu (distance bord de la fenêtre &#8211; bord de la barre).</p>
<p>Nous allons utiliser cette fonction qui permet de déterminer la position d&rsquo;un élément HTML dans la page (à placer avant <em>$(document).ready</em>) :</p>
<blockquote>
<pre>function findPos(el) {
  var x = y = 0;    
  if(el.offsetParent) {    
    x = el.offsetLeft;    
    y = el.offsetTop;    
    while(el = el.offsetParent) {    
      x += el.offsetLeft;    
      y += el.offsetTop;    
    }    
  }    
  return {'x':x, 'y':y};    
}</pre>
</blockquote>
<p>Ensuite placez ce code dans <em>$(document).ready</em> :</p>
<blockquote>
<pre>$('#time').click(function(e) {
  var ev = e || window.event;
  var pos = findPos(this);      
  var diffx = ev.clientX - pos.x;      
  $("#time").progressbar({value: diffx*100/$(this).width()});
  var duration = $('video')[0].duration;
  $('video')[0].currentTime = diffx*duration/$(this).width();      
});</pre>
</blockquote>
<p>On récupère donc la distance rouge du schéma plus haut (<em>ev.clientX</em>) à laquelle on va soustraire le distance bleu (<em>pos.x</em>). Ensuite il suffit de placer la barre de progression à l’endroit cliqué : <em>diffx</em> ramené en pourcentage par rapport à la longueur total de la barre de progression. Et de définir où on doit se placer dans la vidéo : <em>diffx</em> ramené par rapport à la durée total de la vidéo.</p>
<p>Voila pour la barre de progression, passons au réglage du volume.</p>
<p>Nous allons pour cette étape utiliser un autre plugin de JQuery UI : Slider. Celui ci va nous permettre de créer un sélecteur glissant permettant de choisir le niveau du voulme.</p>
<p>Voici le code pour l’initialiser (à placer dans <em>$(document).ready</em>) :</p>
<blockquote>
<pre>$("#volume").slider({
  slide: function(event, ui) {
  var volume = ui.value/100;
  setVolume(volume);
  },
  value: 50
});</pre>
</blockquote>
<p>On réalise ici 2 choses en même temps :</p>
<ul>
<li>on initialise le sélecteur glissant avec une valeur par défaut à la moitié (50 sur 100)</li>
<li>on définit quoi faire lorsque l&rsquo;internaute bougera le sélecteur : on appellera la fonction <em>setVolume()</em> qui va s&rsquo;occuper de définir le niveau du volume qu&rsquo;on lui passe en paramètre</li>
</ul>
<p>Cette fonction n&rsquo;existe pas il faut la créer :</p>
<blockquote>
<pre>function setVolume(value)
{
  if(value == 0)
    $("#btn_volume").css('opacity', 0.3);
  else
    $("#btn_volume").css('opacity', 1.0);
  $("#volume").slider("option", "value", value*100);
  $('video')[0].volume = value;
}</pre>
</blockquote>
<p>On grise/dégrise l&rsquo;icône de volume si le niveau du volume est définit à 0 ou non, on définit la position du sélecteur de volume suivant le niveau de volume et enfin on définit le niveau de volume de la vidéo.</p>
<p>Voila notre sélecteur de volume fonctionne. On peut faire une dernière chose : permettre à l&rsquo;internaute de couper le son quand il clique sur l&rsquo;icône de volume :</p>
<pre>$("#btn_volume").click(function(){
  var volume = $("#volume").slider("option", "value");
  if(volume &gt; 0)
    setVolume(0);
  else
    setVolume(0.5);
});</pre>
<p>On définit le volume à 0 si il n&rsquo;est pas déjà coupé ou on le rétablit à la moitié si c&rsquo;est le cas.</p>
<p>Notre lecteur vidéo HTML5 est presque terminé ! Passons à la dernière étape : le plein écran.</p>
<blockquote>
<pre>//plein écran
$("#fullscreen").click(function(){
      
        var video = $('#video').get(0);
        if(video.requestFullScreen) {
                //fonction officielle du w3c
                video.requestFullScreen();
        } else if(video.webkitRequestFullScreen) {
                //fonction pour Google Chrome (on lui passe un argument pour autoriser le plein écran lors d'une pression sur le clavier)
                video.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);
        } else if(video.mozRequestFullScreen){
                //fonction pour Firefox
                video.mozRequestFullScreen();
        } else { //fallback pour anciens navigateurs
              //si pas déjà en pleine écran
              if($('#video').attr('rel') != 'fullscreen')
              {
                //on met la vidéo en pleine écran
                $('#video').css({position: 'absolute', top: 0, left: 0, width: '100%', height: '100%'}).attr('rel', 'fullscreen');
                //on met la barre de controles en bas de la page
                $('#controls').css({position: 'absolute', bottom: 0, marginLeft: 'auto', marginRight: 'auto'});
                //la barre apparait si on passe dessus
                setTimeout("$('#controls').animate({opacity : 0.0}, 500);", 1000);
                $('#controls').hover(function(){
                  $(this).animate({opacity : 1.0}, 200);
                }, function(){
                  $(this).animate({opacity : 0.0}, 500);
                });
              }
              else
              {
                //on remet la vidéo en mode normal
                $('#video').removeAttr('style').removeAttr('rel');
                //on remet la barre de control en dessous de la vidéo
                $('#controls').animate({opacity : 1.0}, 1).off('hover').removeAttr('style').removeAttr('style');
              }    
        }
        
      });
    $('#controls').animate({opacity : 1.0}, 1).off('hover').removeAttr('style');
  }    
});</pre>
</blockquote>
<p>On vérifié si la vidéo est déjà en pleine écran (attribut rel=&rsquo;fullscreen&rsquo;). Si elle ne l&rsquo;est pas :</p>
<ul>
<li>on l&rsquo;agrandit à la taille de la fenêtre (position en 0,0 et taille 100%)</li>
<li>on position les contrôles du lecteur en bas de page (bottom = 0) et on la cache (opacity = 0.0)</li>
<li>au survol de la barre de contrôle et on la fait réapparaitre</li>
</ul>
<p>Si la vidéo est déjà en plein écran on la ramène en mode « normal » :</p>
<ul>
<li>on supprime les attributs &lsquo;style&rsquo; et &lsquo;rel&rsquo; de la vidéo</li>
<li>on refait apparaitre la barre de contrôle, on supprime l’événement de survol et on supprime l&rsquo;attribut &lsquo;style&rsquo;</li>
</ul>
<p>Voila notre lecteur personnalisé est maintenant terminé. Vous pouvez consulter la <a title="Démonstration lecteur vidéo HTML5 personnalisé" href="https://www.info-d-74.com/demos/video_HTML5/" target="_blank" rel="noopener">démonstration finale </a>et <a title="Tutoriel lecteur vidéo personnalisé HTML5" href="https://www.info-d-74.com/demos/video_HTML5/video_HTML5.zip" target="_blank" rel="noopener">télécharger l&rsquo;archive ZIP</a> de ce tutoriel. N&rsquo;hésitez à laisser un commentaire ou des remarques si besoin.</p>
<p>L’article <a href="https://www.info-d-74.com/realiser-un-lecteur-video-html5-personnalise/">Réaliser un lecteur vidéo HTML5 personnalisé</a> est apparu en premier sur <a href="https://www.info-d-74.com">InfoD 74</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.info-d-74.com/realiser-un-lecteur-video-html5-personnalise/feed/</wfw:commentRss>
			<slash:comments>19</slash:comments>
		
		<enclosure url="https://www.info-d-74.com/demos/video_HTML5/video.webm" length="2348204" type="application/wordperfect" />
<enclosure url="https://www.info-d-74.com/demos/video_HTML5/video.mp4" length="5137944" type="video/mp4" />

			</item>
	</channel>
</rss>
