{"id":1143,"date":"2023-03-24T18:07:12","date_gmt":"2023-03-24T17:07:12","guid":{"rendered":"https:\/\/geekcommunicant.com\/blog\/?p=1143"},"modified":"2023-03-24T18:07:14","modified_gmt":"2023-03-24T17:07:14","slug":"gloubi-script-horloge-illustree","status":"publish","type":"post","link":"https:\/\/geekcommunicant.com\/blog\/2023\/03\/24\/gloubi-script-horloge-illustree\/","title":{"rendered":"Gloubi script &#8211; une horloge illustr\u00e9e"},"content":{"rendered":"\n<p>Aujourd\u2019hui, j\u2019ai d\u00e9cid\u00e9 de m\u2019attaquer \u00e0 la version gloubi d\u2019un script que j\u2019ai \u00e9galement d\u00e9j\u00e0 cr\u00e9\u00e9 de mon c\u00f4t\u00e9&nbsp;: l\u2019horloge illustr\u00e9e.<\/p>\n\n\n\n<p>La version gloubi est visible <a href=\"http:\/\/gloubiweb.free.fr\/scripts\/javascript81.htm\" target=\"_blank\" rel=\"noreferrer noopener\">ici<\/a>, tandis que la cr\u00e9ation de ma propre version, faite avec jQuery, est pr\u00e9sent\u00e9e <a href=\"https:\/\/geekcommunicant.com\/blog\/2012\/10\/04\/jquery-une-horloge-en-image\/\">ici<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00e9sentation de la version gloubi<\/h2>\n\n\n\n<p>Pour commencer, on cr\u00e9\u00e9 10 objets de type <code><a rel=\"noreferrer noopener\" href=\"https:\/\/developer.mozilla.org\/fr\/docs\/Web\/API\/HTMLImageElement\/Image\" target=\"_blank\">Image()<\/a> <\/code>en leur attribuant \u00e0 chacun l\u2019attribut src correspondant.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nc1=new Image(); c1.src=&quot;c1.gif&quot;;\nc2=new Image(); c2.src=&quot;c2.gif&quot;;\nc3=new Image(); c3.src=&quot;c3.gif&quot;;\nc4=new Image(); c4.src=&quot;c4.gif&quot;;\nc5=new Image(); c5.src=&quot;c5.gif&quot;;\nc6=new Image(); c6.src=&quot;c6.gif&quot;;\nc7=new Image(); c7.src=&quot;c7.gif&quot;;\nc8=new Image(); c8.src=&quot;c8.gif&quot;;\nc9=new Image(); c9.src=&quot;c9.gif&quot;;\nc0=new Image(); c0.src=&quot;c0.gif&quot;;\n<\/pre><\/div>\n\n\n<p>Vient ensuite la fonction <code>affiche()<\/code>, permettant de changer les images, qui prend 3 param\u00e8tres en entr\u00e9e&nbsp;: le nombre d\u2019heures, le nombre de minutes et le nombre de seconde. Pour chacun des trois param\u00e8tres on d\u00e9termine l\u2019image \u00e0 afficher pour les dizaines et les unit\u00e9s. Chaque image est modifi\u00e9e en passant par la <a href=\"https:\/\/developer.mozilla.org\/fr\/docs\/Web\/API\/Document\/images\" target=\"_blank\" rel=\"noreferrer noopener\">propri\u00e9t\u00e9 images de l\u2019objet document<\/a>.<\/p>\n\n\n\n<!--more-->\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nfunction affiche(h,m,s){\n    if (h&lt;=9){\n        document.images.a.src=c0.src\n        document.images.b.src=eval(&quot;c&quot;+h+&quot;.src&quot;)\n    }\n    else {\n        document.images.a.src=eval(&quot;c&quot;+Math.floor(h\/10)+&quot;.src&quot;)\n        document.images.b.src=eval(&quot;c&quot;+(h%10)+&quot;.src&quot;)\n    }\n    if (m&lt;=9){\n        document.images.d.src=c0.src\n        document.images.e.src=eval(&quot;c&quot;+m+&quot;.src&quot;)\n    }\n    else {\n        document.images.d.src=eval(&quot;c&quot;+Math.floor(m\/10)+&quot;.src&quot;)\n        document.images.e.src=eval(&quot;c&quot;+(m%10)+&quot;.src&quot;)\n    }\n    if (s&lt;=9){\n        document.images.g.src=c0.src\n        document.images.h.src=eval(&quot;c&quot;+s+&quot;.src&quot;)\n    }\n    else {\n        document.images.g.src=eval(&quot;c&quot;+Math.floor(s\/10)+&quot;.src&quot;)\n        document.images.h.src=eval(&quot;c&quot;+(s%10)+&quot;.src&quot;)\n    }\n}\n<\/pre><\/div>\n\n\n<p>La derni\u00e8re fonction, <code>heure()<\/code>, quant-\u00e0 elle r\u00e9cup\u00e8re les heures, minutes et secondes, puis fait appel \u00e0 <code>affiche()<\/code>. Elle s\u2019appelle ensuite r\u00e9cursivement apr\u00e8s un timeout de 1 seconde. Le premier appel \u00e0 cette fonction est assur\u00e9 par l\u2019\u00e9v\u00e9nement onLoad de l\u2019\u00e9l\u00e9ment &lt;body&gt; de la page.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nfunction heure(){\n    var Digital=new Date()\n    var hours=Digital.getHours()\n    var minutes=Digital.getMinutes()\n    var seconds=Digital.getSeconds()\n    \n    affiche(hours,minutes,seconds)\n    setTimeout(&quot;heure()&quot;,1000)\n}\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Mon remake<\/h2>\n\n\n\n<p>Premi\u00e8re diff\u00e9rence par rapport \u00e0 ma premi\u00e8re version, le HTML utilis\u00e9 pour afficher les nombres ainsi que les sous-titres. Chaque colonne est une div contenant 2 images ainsi qu\u2019une autre div pour le sous-titre. Ces trois div sont contenu dans une div englobante.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;div id=&quot;clock&quot;&gt;\n    &lt;div class=&quot;clock-digits&quot;&gt;\n        &lt;img id=&quot;hd&quot; src=&quot;\/assets\/files\/images\/0.gif&quot;\/&gt;\n        &lt;img id=&quot;hu&quot; src=&quot;\/assets\/files\/images\/0.gif&quot;\/&gt;\n        &lt;div&gt;Heures&lt;\/div&gt;\n    &lt;\/div&gt;\n    &lt;div class=&quot;clock-digits&quot;&gt;\n        &lt;img id=&quot;md&quot; src=&quot;\/assets\/files\/images\/0.gif&quot;\/&gt;\n        &lt;img id=&quot;mu&quot; src=&quot;\/assets\/files\/images\/0.gif&quot;\/&gt;\n        &lt;div&gt;Minutes&lt;\/div&gt;\n    &lt;\/div&gt;\n    &lt;div class=&quot;clock-digits&quot;&gt;\n        &lt;img id=&quot;sd&quot; src=&quot;\/assets\/files\/images\/0.gif&quot;\/&gt;\n        &lt;img id=&quot;su&quot; src=&quot;\/assets\/files\/images\/0.gif&quot;\/&gt;\n        &lt;div&gt;Secondes&lt;\/div&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;\n<\/pre><\/div>\n\n\n<p>Cette div englobante est mise en affichage flexbox, et les div de sous-titre centrent leur texte.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: css; title: ; notranslate\" title=\"\">\n&lt;style type=&quot;text\/css&quot;&gt;\n    #clock {\n        width: 476px;\n        display: flex;\n    }\n    .clock-digits &gt; div {\n        text-align: center;\n    }\n&lt;\/style&gt;\n<\/pre><\/div>\n\n\n<p>Concernant le JS, j\u2019ai d\u00e9cid\u00e9 d\u2019un peu optimiser le code pr\u00e9sent\u00e9 sur gloubi web. En effet, dans ce code, pour chacune des composantes (heures, minutes, secondes) on fait exactement les m\u00eames op\u00e9rations, les seules diff\u00e9rences \u00e9tant la valeur utilis\u00e9e et les images \u00e0 modifier.<\/p>\n\n\n\n<p>Mon nouveau code se pr\u00e9sente sous la forme d\u2019une unique fonction displayTime().<\/p>\n\n\n\n<p>Premi\u00e8re \u00e9tape, on stocke l\u2019heure dans une constante.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nconst date = new Date();\n<\/pre><\/div>\n\n\n<p>Ensuite, je cr\u00e9\u00e9 un tableau d\u2019objets pour les composantes de l\u2019heure. Chacun de ces objets a 3 propri\u00e9t\u00e9s&nbsp;: une valeur (<code>value<\/code>), l\u2019id de l\u2019image des dizaines (<code>dozen<\/code>) et l\u2019id de l\u2019image des unit\u00e9s (<code>unit<\/code>).<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nlet digits = &#x5B;\n    {value : date.getHours(), dozen: &#039;hd&#039;, unit: &#039;hu&#039;},\n    {value : date.getMinutes(), dozen: &#039;md&#039;, unit: &#039;mu&#039;},\n    {value : date.getSeconds(), dozen: &#039;sd&#039;, unit: &#039;su&#039;}\n];\n<\/pre><\/div>\n\n\n<p>On parcours ce tableau, et pour chacune de ses entr\u00e9es, on d\u00e9termine l\u2019image \u00e0 utiliser pour les dizaines et unit\u00e9s. Pour les dizaines, si la valeur est inf\u00e9rieur ou \u00e9gale \u00e0 9, on affiche directement le z\u00e9ro, sinon on utilise le r\u00e9sultat arrondi vers le bas de la division par 10 de la valeur. Pour les unit\u00e9s, on utilise le reste (modulo) de la division par 10 de la valeur.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\ndigits.forEach((digit) =&gt; {\n    if(digit.value &lt;= 9) {\n        document.images&#x5B;digit.dozen].src = &#039;\/assets\/files\/images\/0.gif&#039;;\n    } else {\n        document.images&#x5B;digit.dozen].src = `\/assets\/files\/images\/${Math.floor(digit.value\/10)}.gif`;\n    }\n    \n    document.images&#x5B;digit.unit].src = `\/assets\/files\/images\/${digit.value%10}.gif`;\n});\n<\/pre><\/div>\n\n\n<p>La fonction s\u2019appelle ensuite r\u00e9cursivement apr\u00e8s un timeout de 1 seconde.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nsetTimeout(displayTime, 1000);\n<\/pre><\/div>\n\n\n<p>Le premier appel de cette fonction est assur\u00e9 par l\u2019\u00e9v\u00e9nement load de la fen\u00eatre.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nwindow.addEventListener(&#039;load&#039;, () =&gt; {\n    displayTime();\n});\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Et voil\u00e0. Vous avez tout ce qu&rsquo;il vous faut pour cr\u00e9er l&rsquo;horloge illustr\u00e9e de vos r\u00eaves.<\/p>\n\n\n\n<p>La version finale est visible sur <a href=\"https:\/\/geekcommunicant.com\/demos\/gloubi-script-horloge-illustree.html\" target=\"_blank\" rel=\"noreferrer noopener\">cette page<\/a>.<\/p>\n\n\n\n<p>\u00c0 bient\u00f4t pour d&rsquo;autres articles \u00e0 haute teneur informative \ud83d\udc4b<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aujourd\u2019hui, j\u2019ai d\u00e9cid\u00e9 de m\u2019attaquer \u00e0 la version gloubi d\u2019un script que j\u2019ai \u00e9galement d\u00e9j\u00e0 cr\u00e9\u00e9 de mon c\u00f4t\u00e9&nbsp;: l\u2019horloge illustr\u00e9e. La version gloubi est visible ici, tandis que la cr\u00e9ation de ma propre version, faite avec jQuery, est pr\u00e9sent\u00e9e &hellip; <a href=\"https:\/\/geekcommunicant.com\/blog\/2023\/03\/24\/gloubi-script-horloge-illustree\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[19],"tags":[30,51,15,29],"class_list":["post-1143","post","type-post","status-publish","format-standard","hentry","category-javascript","tag-css","tag-gloubituto","tag-horloge","tag-html"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p2IoOb-ir","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":1074,"url":"https:\/\/geekcommunicant.com\/blog\/2023\/01\/13\/gloubi-script-texte-arriere-plan-defilant\/","url_meta":{"origin":1143,"position":0},"title":"Gloubi script &#8211; texte avec un arri\u00e8re-plan d\u00e9filant","author":"geekc","date":"13\/01\/2023","format":false,"excerpt":"Aujourd\u2019hui nouveau tuto sur un gloubi script d\u2019effet sur texte. Cette fois ci, il s\u2019agit de texte avec arri\u00e8re-plan d\u00e9filant. Principe du script Le script original est disponible sur sa propre page sur le site de notre gloubi adversaire. Il fonctionne selon le principe de calques\u00a0: au-dessus du calque de\u2026","rel":"","context":"Dans &quot;CSS&quot;","block_context":{"text":"CSS","link":"https:\/\/geekcommunicant.com\/blog\/category\/css\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1121,"url":"https:\/\/geekcommunicant.com\/blog\/2023\/02\/24\/gloubi-script-cadre-clignotant\/","url_meta":{"origin":1143,"position":1},"title":"Gloubi script &#8211; un cadre clignotant","author":"geekc","date":"24\/02\/2023","format":false,"excerpt":"Aujourd\u2019hui, nous allons nous attaquer \u00e0 un script pr\u00e9sent\u00e9 chez notre gloubi rival qui pourra vous \u00eatre tr\u00e8s utile pour mettre en avant n\u2019importe quel contenu sur, par exemple, la magnifique page d\u2019accueil de votre tout aussi sublime site\u00a0: le cadre clignotant. Comme pour d\u2019autres gloubi scripts d\u00e9j\u00e0 pr\u00e9sent\u00e9s, il\u2026","rel":"","context":"Dans &quot;CSS&quot;","block_context":{"text":"CSS","link":"https:\/\/geekcommunicant.com\/blog\/category\/css\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1085,"url":"https:\/\/geekcommunicant.com\/blog\/2023\/01\/27\/gloubi-tuto-texte-changeant-couleur\/","url_meta":{"origin":1143,"position":2},"title":"Gloubi tuto &#8211; texte changeant de couleur","author":"geekc","date":"27\/01\/2023","format":false,"excerpt":"Cette fois-ci encore, j\u2019ai d\u00e9cid\u00e9 de m\u2019attaquer \u00e0 un autre gloubi script d\u2019effet sur texte, le texte changeant de couleur. Une fois de plus, d\u00fb \u00e0 l\u2019\u00e9volution des technologies, plus besoin de JavaScript pour obtenir un r\u00e9sultat identique (ou en tout cas tr\u00e8s proche). Fonctionnement du script On indique au\u2026","rel":"","context":"Dans &quot;CSS&quot;","block_context":{"text":"CSS","link":"https:\/\/geekcommunicant.com\/blog\/category\/css\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1133,"url":"https:\/\/geekcommunicant.com\/blog\/2023\/03\/10\/gloubi-script-un-systeme-de-tooltip\/","url_meta":{"origin":1143,"position":3},"title":"Gloubi script &#8211; un syst\u00e8me de tooltip","author":"geekc","date":"10\/03\/2023","format":false,"excerpt":"J\u2019ai d\u00e9cid\u00e9 cette semaine de me pencher sur le script de tooltip pr\u00e9sent\u00e9 sur le site de gloubiweb. Dans une premi\u00e8re partie je pr\u00e9senterai rapidement le fonctionnement du script actuel, et dans une deuxi\u00e8me, je vous indiquerai comment recr\u00e9er (quasi) \u00e0 l\u2019identique cet ancien script. Pr\u00e9sentation de du code existant\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1081,"url":"https:\/\/geekcommunicant.com\/blog\/2023\/01\/20\/gloubi-tuto-menu-images-reactives\/","url_meta":{"origin":1143,"position":4},"title":"Gloubi tuto &#8211; menu avec images r\u00e9actives","author":"geekc","date":"20\/01\/2023","format":false,"excerpt":"Nouvelle semaine, nouveau gloubi-tuto. Cette fois-ci, on s\u2019attaque \u00e0 un autre script de menu. M\u2019enfin script\u2026 pas cette-fois. M\u00eame si sur gloubiweb cela est pr\u00e9sent\u00e9 comme un script, il s\u2019agit en fait de CSS. Ce menu, qui est visible sur cette page, utilise la technique des sprites CSS. Pr\u00e9sentation de\u2026","rel":"","context":"Dans &quot;CSS&quot;","block_context":{"text":"CSS","link":"https:\/\/geekcommunicant.com\/blog\/category\/css\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1108,"url":"https:\/\/geekcommunicant.com\/blog\/2023\/02\/10\/gloubi-tuto-menu-avec-description-du-lien\/","url_meta":{"origin":1143,"position":5},"title":"Gloubi tuto &#8211; menu avec description du lien","author":"geekc","date":"10\/02\/2023","format":false,"excerpt":"Voici venu le temps d\u2019un nouveau gloubi tuto sur un autre script de menu. Aujourd\u2019hui, nous allons nous attaquer au menu interactif avec description du lien. Fonctionnement du script Le menu est mis en forme avec un simple tableau \u00e0 une seule colonne, avec un case vide en pied de\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts\/1143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/comments?post=1143"}],"version-history":[{"count":0,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts\/1143\/revisions"}],"wp:attachment":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/media?parent=1143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/categories?post=1143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/tags?post=1143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}