Skip to content

taltech-coding/init-veeb-2025

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Päevi vaheajani veebileht

Abivahendid

Ka siin töötoas on parimaks abivahendiks abilised, kellelt küsimusi küsida. Küsi julgelt abi :) Kui ei saa jõuga, siis saab nõuga! Kui abiõppejõud sind aidata ei oska, siis kindlasti on sinu küsimusele vastus ka Google'is või Stack Overflow'is. Samuti on meil varasemate töötubade jaoks loodud veebilehe tegemise abimaterjalid ja ülesannete näidislahendused on kättesaadaval kaustas "solutions".

Sissejuhatus

Vaheajad on ühed oodatuimad tähtpäevad õpilaste elus. Küll aga on tüütu arvutada, millal järgmine vaheaeg tuleb. Selleks hakkasid sa koos sõbraga arendama veebilehte, mis näitab reaalajas, kui palju aega on vaheajani jäänud. Käes on aga eksamiperiood ja kahjuks peab su sõber õppima matemaatika järeleksamiks, sest ta kukkus eksami läbi. Seega tuleb sul üksinda töö lõpule viia!

Ülesanded

Oleme sulle ette valmistanud pisikesed ülesanded ning juhtnöörid nende lahendamiseks. Saad kätt proovida nii HTMLi, CSSi kui JavaScriptiga. See tähendab, et saad soovi korral muuta ise veebisaidi paigutust, lisada või eemaldada elemente ning muuta selle välimust ja funktsionaalsust!

Oluline on, et sul oleks tore ja et saaksid natuke oma loovust valla lasta! Kui satud segadusse või vajad abi, siis tõsta julgelt käsi või guugelda :)

❓ Puuduvate tag'ide lisamine

Nagu varasemalt mainitud sai, siis kogu HTML on üles ehitatud tag'ide peale. Iga HTMLi komponent on mingisugune tag!

Esiteks tuleks meil korrastada veidi faili index.html. Ava see fail ja otsi sealt üles lehekülje päis (<head> tag). Siin tuleb sul taastada ühendus meie HTML struktuurifaili, CSS stiilifaili ja JavaScript skriptifaili vahel.

💡 Kuidas ühendada omavahel HTMLi ja CSSi?

CSSi faili ühendamiseks saame kasutada isesulguvat tagi <link>, ning panna talle külge märgendi rel="stylesheet", et anda märku, et tegemist on lehekülje stiili sisaldava failiga. CSS faili nimi tuleb panna märgendis href="" jutumärkide vahele.

Kui see kõik kokku panna, siis CSS faili ühendamine võiks välja näha umbes selline:

<link rel="stylesheet" href="style.css"/>
💡 Kuidas ühendada omavahel HTMLi ja JavaScripti?

JavaScripti faili ühendamine käib väga sarnaselt kui CSSi ühendamine, aga seal tuleb kasutada tagi <script>. Skriptile tuleb märgenditeks anda JavaScripti faili nimi src="failinimi.js" ja tüüp type="text/javascript". Kuna meie JavaScripti skript hakkab muutma veebilehe sisu, siis peaks tema ühendamisega ootama kuni ülejäänud veebileht on ära laadinud, ning selleks tuleb talle märgendina lisada veel defer. <script> tag ei ole isesulguv, seetõttu tuleb see lõpuks ka sulgeda: </script>

Kui see kõik kokku panna, siis JavaScripti faili ühendamiseks kasutatav kood võiks olla näiteks selline:

<script src="script.js" type="text/javascript" defer></script>

Pärast HTMLi, CSSi ja JavaScripti vahel ühenduse taastamist tuleks HTML-fail veel kriitilise pilguga üle käia. Äkki on veel mõni HTMLi tag jäänud korralikult lõpuni kirjutamata?

Selgub, et üks tag tuleks tõesti veel korda teha. HTMLis kasutatakse tähtsa teksti märgistamiseks tihti pealkirjasid (heading). Kõige tähtsam tekst märgistatakse ära tag'iga <h1>, sellest järgnev tag'iga <h2> jne.

💡 Kuidas töötavad HTMLis pealkirjad?
<h1>Suur pealkiri</h1>
<h2>Alapealkiri</h2>
<h3>Veidi väiksem alapealkiri</h3>
<h4>Juba päris väike alapealkiri</h4>
<h5>No ikka tõesti väike alapealkiri</h5>
<h6>Peaaegu sama väike kui tavaline tekst</h6>

Antud juhul piisab meil sellest, kui märgistame meie veebilehe kõige olulisema teksti, aja lugemise teksti, tag'iga <h1>.

💄 Puuduvate CSS väärtuste lisamine

Nüüd kui HTMLi sisu parandatud sai, tuleks teha mõned korrektuurid ka veebisaidi välimusele. Sinu ülesandeks on veebisaidile puuduvad värvid lisada!

CSS koosneb selector'itest, millega valitakse elemente. Nende sees saab määrata elemendile erinevaid omadusi. Igale omadusele saab omakorda anda eri sorti väärtuseid. Omadused on näiteks:

  • color - teksti värv
  • background-color - tausta värv
  • font-size - teksti suurus
  • width - elemendi laius
  • height - elemendi kõrgus
  • margin - elemendi veeris ehk ala valitud elemendi ja teiste elementide vahe
  • padding - elemendi sees olev "puhver" (Näiteks kui mul on musta joonega kast, mille sees on tekst, siis tekst puutub algul kasti. Kui lisada padding, siis tekib vahe teksti ja kastiääre vahele.)
  • jne (Fun fact: CSSil on üle 200 erineva omaduse)

Mine faili style.css ja lisa puuduvad värvid kohtadesse, kus background-color või color väärtused on puudu. Need kohad leiad ülesse "TODO" kommentaaride järgi. Et asi lihtsam oleks, oleme loonud värvidele muutujad (variable), mida saab kasutada. Neid muutujaid näed sa style.css failis ridadel 67-75!

💡 Kuidas kasutada CSSis muutujaid?

Siin (ja style.css failis ridadel 67-75) saad sa neid väärtuseid ka näha - väärtused, mis algavad "--" ongi muutujad, mida saab igal pool kasutada.

:root {
    --color-background: #FDFFEC;
    --text-color-blue: #2D3142;
    --text-color-green: #81A880;
    --text-color-orange: #FF8C42;
    --color-blue: #2D3142;
    --color-green: #81A880;
    --color-orange: #FF8C42;
}

Muutujate kasutamiseks on selline funktsioon nagu var(), mille sisse sa paned muutuja nime, et seda kasutada. Näide:

background-color: var(--color-background);
color: var(--color-orange);

🗓️ Kuupäevade lisamine

Nüüd on aeg vaadata JavaScripti poole. Su sõber lisas juba päris mitme sündmuse kuupäevad ise, kuid ta ei mäletanud, millal su sünni- ja nimepäev on. Seega pead sa need kuupäevad ise sisestama.

Failis script.js asub veebisaidi JavaScripti kood. Sisu võib tunduda küll hirmus, kuid ära muretse! Enamus tööst on juba tehtud. Kohe faili alguses ongi sündmuste nimekiri (defineeritud kui timetable).

Nagu näha on, siis sünnipäeva ja nimepäeva kuupäevadesse on jäetud YYYY-MM-DD, sinu ülesanne ongi need asendada samas formaadis numbritega (Ehk siis aasta-kuu-päev)! Õiget vormistust näed ka teiste ürituste pealt. Vaata, et lisaksid oma kuupäevale nii alguse kui lõpu väärtuse, et kood toimiks õigesti (algus ja lõpp on samal päeval, lihtsalt algus on kell 00:00 ja lõpp kell 23:59).

🔢 Aja arvutamine

Jätkame JavaScriptiga. Su sõber on kirjutanud valmis aja arvutamiseks funktsiooni updateCountdown();, kuid ta ei kutsu seda kuskil välja ehk funktsioon ei käivitu. Lisaks sellele peab funktsiooni välja kutsuma iga 1 sekundi ehk 1000 millisekundi tagant, et see toimiks nagu õige kell toimima peaks.

Rida 182 läheduses peaksid leidma "TODO", mis käib selle ülesande kohta. Seal peadki sa sisestama õige funktsiooni nime, et see alguses välja kutsuda. Nagu näha, siis funktsiooni välja kutsumiseks tuleb funktsiooni nime järgi panna (sulud). Kohe pärast seda pead sa uuesti funktsiooni nime sisestama teise funktsiooni setInterval(FUNKTSIOONI_NIMI, 1000);, sest seal hakatakse aja uuendamise funktsiooni välja kutsuma iga sekundi tagant. Pane tähele, et siin pole funktsiooni nime järele enam (sulge) vaja!

Kui oled kõik õigesti teinud, siis nüüd peaks veebilehel asuv countdown toimima!

💭 Kuupäevade valija täiendamine

Nüüd kui kuupäevad on olemas, tuleks nende valik kajastada ka HTMLis, et neid üldse valida saaks. See pole õnneks raske!

Mine faili index.html ja selle faili lõpuridadelt leiad sa sellise tagi nagu <select name="event" id="event">. Sinna sisse hakkadki sa valikuid lisama! Nagu näha on, siis seal on juba üks valik olemas. Jäänud on veel lisada valikud teiste tähtpäevade jaoks.

Kõige lihtsam on teha copy-paste esimeselt realt ja asendada value="" väärtus tähtpäevale vastavaga. Et iga valik saaks õige väärtuse, siis vaata script.js faili algust, kus on iga tähtpäeva nimi välja toodud.

💡 Kuidas lisada õige väärtus option tag'ile?
"kooli lõpp": [ // "kooli lõpp" on tähtpäeva nimi ja selle sama nime pead sa ka optioni väärtuseks panema
    {
        start: new Date("2025-06-18T00:00:00.000Z"),
        end: new Date("2025-06-26T23:59:59.000Z"),
    }
],
<option value="kooli lõpp">kooli lõpuni</option> <!-- "kooli lõpp" tuleb niimoodi sisestada -->

🔄️ Tähtpäeva nime uuendamine

Nüüd on meie veebileht juba päris funktsionaalne! Ent tähelepanelik vaatleja märkab, et kui valida vaheaja asemel näiteks sünnipäevani aja lugemine, siis hakkab kell küll õige päevani aega lugema, aga tekst veebilehel teatab endiselt, et me loeme aega vaheajani! Kuidas seda küll parandada?

Õnneks on selle vea parandamine imelihtne! Ava fail script.js ja otsi sealt üles funktsioon updateEventTitle(). See funktsioon peaks meie eest seda teksti uuendama, ent paistab, et koodi autor on unustanud määrata, millise ID-ga HTML-elementi me siinkohal uuendama peaks.

Proovime sobiva elemendi ID üles leida! Ava fail index.html ja otsi sealt üles tekstielement, kus on kirjas "Vaheajani on jäänud". Nüüd jäta selle elemendi ID meelde, mine tagasi script.js faili, ja kirjuta seesama ID funktsiooni updateEventTitle() tühjade jutumärkide sisse. NB! ID tuleb ära muuta nii if kui ka else harudes!

Kui failis script.js on parandused tehtud, siis võiks meie leht uue kuupäeva valimisel õigesti näidata, mis päevani meie countdown nüüd loeb!

☀️🌙 Dark ja light mode lüliti parandamine

Kõige ägedam asi on veel jäänud, et veebileht oleks lõpuks valmis! Nimelt tuleb korda teha teemalüliti (theme switcher). Siis saaksid silmad lõpuks puhata.

Lõpetame samuti JavaScriptiga. script.js failis on veel üks TODO, mis asub real 218 (umbes seal). Võib-olla märkad isegi, et sealt on midagi puudu. Nimelt data-theme määramisel ei anta sellele väärtust, mis muudaks veebilehe välimust. Tühjade jutumärkide sisse peab kirjutama vastavalt "light" või "dark", et koodijupp tööle hakkaks.

HINT: Vaata, kuidas kohe pärast seda pannakse localStorage'issee "theme" väärtus.

⭐ Boonusülesanded

  • 👑 Muuda veebilehe välimust enda maitse järgi. Võid lisada värve, muuta fonti ja paigutusi jne!
  • 👑 Lisa sündmuste valikusse ka teisi sündmusi.
  • 👑 Võid lisada mingid eriefektid, kui valitud sündmus kätte jõuab. Näiteks confetti!

About

init 2025 - veebi töötuba

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •