Úvodná » kódovanie » Ako vytvoriť jednoduchý adventný kalendár v jazyku JavaScript

    Ako vytvoriť jednoduchý adventný kalendár v jazyku JavaScript

    Advent je obdobie čakania a prípravy na Vianoce, ktoré začína štyri nedeľne pred Štedrý večer. Prechod adventného času sa tradične meria pomocou adventného kalendára alebo adventného venca. Aj keď začiatok adventu nie je pevne stanoveným dátumom, adventné kalendáre zvyčajne začínajú 1. decembra.

    Na základe miestnych zvykov môžu Adventné kalendáre mať rôzne vzory, ale najčastejšie majú formu veľké obdĺžnikové karty s 24 oknami alebo dverami označenie dní medzi 1. a 24. decembrom. Dvere skrývajú správy, básne, modlitby alebo malé prekvapenia.

    V tomto príspevku vám ukážem, ako to vytvorte adventný kalendár v objektovo-orientovanom javascript. Ako je to urobené v programe Vanilla JavaScript, môžete ľahko umiestniť kód na svoju vlastnú webovú stránku.

    • demonštrácie
    • Stiahnuť zdroj

    Návrh kalendára JavaScript

    Náš Adventný kalendár bude mať 24 dverí na pozadí s vianočnou tematikou. Každé dvere skryje vianočný citát, ktorý bude zobrazí sa vo forme upozornenia, keď používateľ klikne na dvere. Dvere zostávajú zatvorené až do daného dňa, ako je to v prípade adventného kalendára v reálnom živote; dvere sa nedajú otvoriť pred správnym dňom.

    Dvere, ktoré sú už povolené, budú mať odlišnú farbu a farbu pozadia (biele) ako tie, ktoré sú pre osoby so zdravotným postihnutím (svetlozelené). Budeme používať HTML5, CSS3 a JavaScript na prípravu nášho Adventného kalendára, ktorý vyzerá takto:

    Krok 1 - Vytvorte štruktúru súborov a zdroje

    Po prvé, musíme vybrať pekný obrázok na pozadí. Vybral som si jeden s orientáciou na výšku z Pixabay, takže môj kalendár bude obsahovať 4 stĺpce a 6 riadkov.

    Je dobré, ak preferujete orientáciu na šírku. Stačí zmeniť pozície dverí v kóde JavaScript, ako budete mať 6 stĺpcov a 4 riadky. Ak máte obrázok, vytvorte priečinok s názvom /snímky, a uložte ho.

    Bude to náš jediný zdroj obrázkov pre tento projekt.

    Pre súbory JavaScriptu vytvorte / skripty priečinka vo vašom koreňovom priečinku. Do neho umiestnite dva prázdne textové súbory a pomenujte ich calendar.js a messages.js. Calendar.js bude držať funkčnosť, zatiaľ čo messages.js bude obsahovať pole správ, ktoré sa objavia pri použití používateľa “otvára” (kliknutia na) dvere.

    Potrebujeme tiež súbor HTML a CSS, takže vytvorte dva prázdne súbory vo vašom koreňovom priečinku a uveďte ich index.html a style.css.

    Keď ste pripravení mať zdroje a štruktúru súborov, musíte tento projekt dokončiť a koreňový priečinok vyzerá takto:

    Krok 2 - Vytvorte HTML

    HTML kód, ktorý používame, je veľmi jednoduchý. Šablóna šablón CSS je prepojená v súbore časť, zatiaľ čo v dolnej časti sú zahrnuté dva súbory JavaScript časť. Je to nevyhnutné, pretože ak vložíme skripty do sekcia, kód by nebol vykonaný, pretože používa prvky načítanej stránky HTML.

    Adventný kalendár sám je umiestnený vo vnútri

    sémantická značka. Načítavame vianočný obrázok ako Prvok HTML, a nie ako vlastnosť pozadia CSS, pretože takto môžeme ľahko pristupovať k nemu ako prvok DOM.

    Pod obrázkom umiestnime prázdny neusporiadaný zoznam s “adventDoors” id selektor, ktorý bude vyplnený skripty. Ak používateľ nemá vo svojom prehliadači povolený jazyk JavaScript, uvidí jednoduchý vianočný obrázok.

         Adventný kalendár       

    Adventný kalendár

      Krok 3 - Vyplňte “správy” rad

      Potrebujeme 24 vianočných cenových ponúk na vyplnenie “správy” array. Vybral som moje z GoodReads.

      Otvor scripts / messages.js súbor; tu uvádzame úvodzovky, aby sme ich oddelili od funkčnosti. správy pole je pole v mape, každý prvok vonkajšieho poľa obsahuje ďalšie pole s dvoma prvkami: citát a jeho autor.

      Vložte pole s vašimi obľúbenými cenovými ponukami podľa nasledujúcej syntaxe:

       var správy = [["Citácia 1", "Autor 1"], ["Citácia 2", "Autor 2"], ... ["Citácia 24", "Autor 24"]];

      Krok 4 - Pridanie základných štýlov CSS pre dvere

      Ak chcete vytvoriť potrebné štýly CSS pre dvere, musíme si predstaviť konečný dizajn, pretože samotné dvere budú vytvorené pomocou jazyka JavaScript v nasledujúcich krokoch.

      Musíme vytvoriť 4 stĺpce a 6 riadkov obdĺžnikov v správnom zarovnaní. Za týmto účelom použijeme pozícia: relatívna a poloha: absolútna Pravidlá CSS. Keď sa presná poloha zmení dvere po dverách, pridáme to top, dno, ľavý, a správny vlastnosti v jazyku JavaScript, v CSS stačí pridať relatívnu pozíciu ku kontajneru (nezoradený zoznam v jazyku HTML) a absolútne pozície pre prvky zoznamu (pridajú sa aj do JS).

      Ďalšia dôležitá vec v súbore šablón štýlov je vytvoriť iný dizajn pre postihnutých a povolené stavy. .invalidný selektor bude pridaný k zakázanému jazyku JavaScript.

      Pre moje demo Kalendár som nastavil pevný biely okraj a biele písma pre povolené dvere s priehľadným bielym pozadím na vznášanie; a svetlozelená hranica a písma a transparentné svetlozelené pozadie pre osoby so zdravotným postihnutím. Ak sa vám tento dizajn nepáči, môžete meniť farby a štýly podľa vášho želania.

      Umiestnite nasledujúci kód (alebo upravené pravidlá štýlu) do svojho style.css súbor.

       ul # adventDoors pozícia: relatívna; štýl zoznamu: žiadne; polstrovanie: 0; rozpätie: 0;  #adventDoors li pozícia: absolútna;  #adventDoors li a farba: #fff; šírka: 100%; výška: 100%; veľkosť písma: 24px; text-align: center; zobrazenie: flex; flex-smer: stĺpec; justify-content: center; textová výzdoba: žiadne; okraj: 1px #fff pevný;  #adventDoors li a: nie (.disabled): vznášať color: #fff; farba pozadia: transparentná; farba pozadia: rgba (255,255,255,0.15);  #adventDoors li a.disabled okraj-farba: # b6fe98; farba pozadia: rgba (196,254,171,0.15); farba: # b6fe98; kurzor: predvolené; 

      Krok 5 - Vytvorte globálne premenné

      Od tohto kroku budeme pracovať len s scripts / calendar.js súbor, takže teraz ho otvorme. Náš Adventný kalendár bude používať dve globálne premenné.

      myCal premenná drží obrázok Kalendára ako objekt JS. Obraz už bol pridaný do priečinka index.html súbor v kroku 2. Dvere umiestnime na tento obrázok v kroku 7. Zachytíme príslušný kód HTML prvok označený symbolom “adventCal” identifikátor pomocou metódy getElementById () DOM. myCal premenná bude objekt HTMLImageElement DOM.

      aktuálny dátum premenná obsahuje aktuálny dátum tak, aby sa náš skript mohol ľahko rozhodnúť, či by mali byť dvere povolené alebo zakázané. Vytvoriť aktuálny dátum inštancujeme nový objekt triedy Date JavaScript.

      Vložte nasledujúci útržok kódu do hornej časti calendar.js súbor.

       var myCal = document.getElementById ("adventCal"); var aktuálny dátum = nový dátum ();

      Krok 6 - Vytvorte “dvere” Trieda

      Keďže potrebujeme 24 dverí, najjednoduchší spôsob, ako to urobiť, je vytvoriť “dvere” triedy a neskôr ju vytvoriť 24-krát.

      Naša trieda dverí má dva parametre, kalendár a deň. Pre kalendár parameter budeme musieť prejsť vianočný obrázok, ktorý bude fungovať ako pozadie. Pre deň parameter budeme musieť prejsť aktuálny december vo forme celého čísla.

      Presné hodnoty parametrov odovzdáme v poslednom kroku (krok 8) počas inštancie objektov 24 dverí.

      Pre triedu dverí vytvoríme 5 vlastností a 1 spôsob. V tomto kroku budeme prechádzať len cez 5 nehnuteľností a vysvetlím to obsah () v ďalšom kroku.

      “šírka” & “výška” vlastnosti

      šírka a výška vlastnosti dynamicky vypočítavajú šírku a výšku jednotlivých dverí (ktoré sa menia podľa šírky a výšky obrazu na pozadí).

      Koeficienty 0,1 a 0,95 sú v rovnici tak, aby ponechali nejaký priestor pre okraje, medzi dvoma dverami a po stranách kalendára..

      “adventMessage” vlastnosť

      adventMessage vlastníctvo obsahuje obsah výstražných správ, konkrétne citátov a zodpovedajúcich autorov, ktoré našu messages.js súbor drží. adventMessage nehnuteľnosť má cenovú ponuku a autor od správy [] pole, v závislosti od aktuálneho dátumu.

      Pre december 1 adventMessage vlastnosť má prvý prvok vonkajšieho poľa, ktorý je správy [0], pretože súbory sú v programe JavaScript založené na nulách.

      Z rovnakého dôvodu je cenová ponuka pre 1. december umiestnená ako správy [0] [0] (prvý prvok vnútorného poľa) a zodpovedajúceho autora sa dá dosiahnuť ako správy [0] [1] (druhý prvok vnútorného poľa).

      “X”&”y” vlastnosti

      vlastnosti X a y držte správne pozície každého dverí, ktoré použijeme v ďalšom kroku na nastavenie top a ľavý Vlastnosti CSS. Tieto budú dopĺňať pozícia: relatívna a poloha: absolútna Pravidlá CSS, ktoré sme nastavili v kroku 4 pre kontajner dverí (ul # adventDoors) a samotné dvere (#adventDoors li). Výpočty sa môžu zdajú byť trochu zastrašujúce, ale prejdime ich rýchlo.

      X nehnuteľnosť bude použitá ľavý CSS v nasledujúcom kroku (krok 7). Určuje v pixeloch, kde je potrebné umiestniť jednotlivé dvere na os x.

      Zoberie to šírku obrazu na pozadí a ponecháva si na ňu malú rezervu (4%). Potom s pomocou operátora zvyšku vyhodnotí, v ktorom stĺpci bude umiestnený (nezabudnite, že bude 4 stĺpce) a nakoniec pridáva malý (10%) okraj do každej dvery pomocou násobiča 1.1.

      Rovnakým spôsobom y nehnuteľnosť bude použitá top CSS určuje vlastnosť a podobne určuje v pixeloch, kde je potrebné umiestniť jednotlivé dvere na os y.

      Vezmeme výšku obrazu na pozadí pomocou vlastností výšky prechádzajúceho kalendár parameter (ktorý obsahuje objekt DOM) a ponechajte 4% okraj okolo zvislých stránok kalendára.

      Potom pomocou metódy Math.floor () vypočítame, v ktorom riadku daný dverný objekt bude (bude 6 riadkov).

      Nakoniec pridáme 10% rozpätie pre každý objekt dverí vynásobením jeho výšky použitím násobiča 1,1.

       funkcia Dvere (kalendár, deň) this.width = ((calendar.width - 0.1 * calendar.width) / 4) * 0.95; this.height = ((calendar.height - 0.1 * calendar.height) / 6) * 0.95; this.adventMessage = 'deň' + deň + 'adventu \ n \ n' + '"+ správy [deň - 1] [0] +'" \ n \ - 1] [1] + '\ n \ n'; this.x = (0,04 * calendar.width + ((deň - 1)% 4) * (1,1 * táto šírka)); this.y = - (0,96 * calendar.height - Math.floor ((deň - 1) / 4) * (1,1 * táto výška)); this.content = funkcia () ...; 

      Krok 7 - Vyplňte “Content ()” metóda

      Je to obsah () spôsob, ktorý zobrazí naše dvere v prehliadači. V prvom rade vytvoríme nový uzol DOM pomocou premennej uzol ktorý vytvorí

    • prvky vo vnútri nášho aktuálne prázdneho neusporiadaného zoznamu (ul # adventDoors) v súbore HTML.

      Vzhľadom na to, že trieda Dvere bude 24-krát inštancovaná v smere slučky v nasledujúcom kroku (krok 8), znamená to, že budeme mať 24

    • prvky, jeden li pre každé dvere. V ďalšom riadku pridáme nový uzol do #adventDoors neurčený zoznam ako podradený prvok pomocou metódy DOM appendChild ().

      Vlastnosť node.id v ďalšom riadku pridá jedinečný selektor id na každý prvok zoznamu (dvere). Budeme to potrebovať, aby sme mohli správne prechádzať cez dni v ďalšom kroku (krok 8). Týmto spôsobom dvere 1 budú mať id =”door1 ", Dvere 2 budú mať id =”door2 " selektor atď.

      Vlastnosť node.style.cssText v ďalšom riadku pridá niektoré pravidlá CSS ku každému prvku (dverám) zoznamu pomocou style =”... ” Atribút HTML, ktorý sa používa na zahrnutie inline CSS do súborov HTML. node.style.cssText vlastnosť používa vlastnosti dverí, ktoré sme nastavili v predchádzajúcom kroku (krok 6).

      Ak chcete, aby bol náš objekt na dvere klikateľný, musíme tiež pridať tag v prvkoch zoznamu. Dosahujeme to pomocou innerNode premennú, ktorú viazame ako podradený element na príslušný prvok zoznamu identifikovaný id =”dvere [i]” selektor (s [i] je číslo dňa) pomocou metódy DOM appendChild () rovnako ako predtým.

      Vlastnosť innerHTML v nasledujúcom riadku zobrazuje aktuálny deň (1-24) v hornej časti dverí v prehliadači a pridáme tiež href =”#” atribút našim značkám kotvy pomocou vlastnosti DOM href.

      Nakoniec v príkaze if-else vyhodnotíme, či by mal byť objekt Dvere povolený alebo zakázaný. Najprv skúmame, či sme v 12. mesiaci roka (december) pomocou metódy getMonth () objektu Date. Musíme pridať 1, pretože getMonth () je nula (január je mesiac 0 atď.).

      Po tom skontrolujeme, či sa aktuálny dátum nachádza v databáze aktuálny dátum globálna premenná, ktorú nastavíme v kroku 5, je menšia ako deň ktorý aktuálny objekt dverí predstavuje.

      Ak to nie je december, alebo deň, ktorý dané dvere predstavuje, je väčší ako aktuálny dátum, dvere by mali byť zablokované, v iných prípadoch musí byť povolené, aby ich užívatelia mohli kliknúť a zobraziť súvisiacu správu adventu.

      Ak je dvere zablokované, pridáme a class =”invalidný” selektor na danú značku kotvy pomocou vlastnosti className. Pamätajte, že sme už vybrali .invalidný triedy s CSS v kroku 4. Takisto je potrebné nastaviť atklický atribút udalosti HTML, aby sa vrátil falošný.

      Ak je Door v stave povolený, pridáme ho adventMessage vlastnosť na výstražnú správu a vložte ju do atribútu atclick HTML atribútu.

       this.content = funkcia () var node = document.createElement ("li"); document.getElementById ( "adventDoors") appendChild (uzla). node.id = "dvere" + deň; node.style.cssText = "šírka:" + this.width + "px; výška:" + this.height + "px; top:" + this.y + "px; left:" + this.x + "px "; var innerNode = dokument.createElement ("a"); dokument.getElementById ("dvere" + deň) .appendChild (vnútornáNode); innerNode.innerHTML = deň; innerNode.href = "#"; ak ((currentDate.getMonth () + 1) < 12 || currentDate.getDate() < day )  innerNode.className = "disabled"; innerNode.onclick = function()  return false;   else  var adventMessage = this.adventMessage; innerNode.onclick = function()  alert(adventMessage); return false;   ;

      Krok 8 - Inicializácia “dvere” objektov

      Nakoniec musíme 24-krát inicializovať triedu dverí.

      Aby sme tak urobili, používame Expresiu okamžite vyvolanej funkcie, ktorá je tu celkom užitočná, pretože nepotrebujeme premennú, pretože chceme spustiť kód vo vnútri funkcie iba raz.

      Vytvárame dvere [] pole, ktoré bude obsahovať 24 dverí. Pohybujeme v dňoch od 1 do 24 (budú to 0-23. Prvky dverí [], pretože pole sú nulové) a nakoniec vrátiť celú dvere [] vrátane 24 objektov dverí, ktoré sa zobrazia v prehliadači.

       (funkcia () var dvere = [], pre (var i = 0; i < 24; i++)  doors[i] = new Door(myCal, i + 1); doors[i].content();  return doors; )();
      • demonštrácie
      • Stiahnuť zdroj