Recapitulare JS

Inițializare

Din cauza felului în care rulează JS-ul în browser, o practică bună e să așteptăm până pagina este complet încărcată, și abia apoi să rulăm codul nostru:

window.addEventListener('load', function() {
    // vom scrie codul în această funcție
})

Pregătim elementele cu care vom lucra

Pentru a selecta un element din pagină, ne folosim de DOM, pentru a selecta primul element ce conține clasa startButton:

const startButtonElement = document.querySelector('.startButton')

dacă avem un input cu clasa taskName, vom putea citi valoarea lui folosind această referință:

const taskNameElement = document.querySelector('.taskName')

pentru a citi valoarea unui input:

let taskName = taskNameElement.value

! atenție, vom primi ceea ce a scris utilizatorul în momentul când vom citi această valoare, de aceea, e bine să o facem la după o anumită acțiune (de ex. la click pe un buton).

pentru a urmări o acțiune vom folosi addEventListener, pentru a urmări acțiunea de click:

startButtonElement.addEventListener('click', function() {
    let taskName = taskNameElement.value
    console.log(taskName)
})

astfel, vom citi exact ceea ce a scris utilizatorul în câmpul nostru înainte să dea click pe buton. Dacă dorim să folosim taskName în alte funcții, atunci îl definim în afara funcției, și-l suprascriem la click:

let taskName
startButtonElement.addEventListener('click', function() {
    taskName = taskNameElement.value
})

Manipularea timpului

timpul în JS este păstrat printr-un număr de milisecunde ce au trecut din 1970 (se primește un număr de 13 cifre), pentru a afla milisecunda curentă:

const exactTime = new Date()

new Date() ne va întoarce un obiect de tip Date, care are o valoare și câteva metode de manipulare al timpului, salvând acest obiect în variabila exactTime, putem să o folosim mai târziu pentru a ști momentul exact când am creat această variabilă.

Câteva metode de a citi o parte din dată / oră:

const timestamp = exactTime.getTime() // ex. 1517437645516
const hours = exactTime.getHours() // ora curentă (0-23)
const year = exactTime.getFullYear() // ex. 2018
const minutes = exactTime.getMinutes()
const seconds = exactTime.getSeconds()
const miliseconds = exactTime.getMilliseconds() // (0-999)

referința cu toate metodele poate fi găsită aici.

Uneori, avem nevoie să facem diferența dintre două momente de timp. Putem face aceasta foarte simplu datorită faptului că timpul e simplu număr:

const dif = new Date() - exactTime

astfel, în dif vom primi diferența de milisecunde dintre momentul când am aflat exactTime și acum. Acum, putem ușor face calcule necesare pentru a afla valori parțiale (secunde, minute, ore, zile, ani...):

const sec = (dif / 1000) % 60
const min = (dif / (60 * 1000)) % 60
const h = (dif / (60 * 60 * 1000))
console.log('Au trecut ' + h + ':' + min + ':' + sec + ' de la ...')

După cum se vede, sunt doar câteva operații matematice simple. Operatorul % modulo întoarce restul de la împărțire (ex. 13 % 3 = 1, 13 = 4 * 3 + 1)

Dacă dorim să facem un timer și să afișăm cât timp a trecut de la un moment anume, putem crea o funcție care să ne întoarcă această valoare:

function calcDif(fromTime) {
    const dif = new Date - fromTime
    const sec = (dif / 1000) % 60
    const min = (dif / (60 * 1000)) % 60
    const h = (dif / (60 * 60 * 1000))
    return h + ':' + min + ':' + sec 
}

Pentru a folosi funcția:

const fixedTime = new Date('2018-02-01 01:00')
console.log('Au trecut ' + calcDif(fixedTime) + ' de la ...')

în acest exemplu am inițializat obiectul de tip Date cu o valoare, astfel, zicândui momentul care ne interesează. Având această funcție, putem crea ușor un timer:

const timerElement = document.querySelector('.timer')
const startTime = new Date()
let timerRef = setInterval(function() {
    timerElement.innerHTML = calcDif(startTime)
}, 1000)

câteva clarificări: timerElement este orice element html în care să afișăm un text ceva (dacă e input, se schimbă valoarea lui, nu html-ul), de ex. un div, aici vom afișa cât timp a trecut setInterval este o metodă care va apela o funcție la intervalul setat în milisecunde (în cazul nostru, la fiecare 1000ms === 1s) innerHTML ne permite să citim sau să modificăm html-ul unui element, în cazul nostru vom scrie în el cât timp a trecut.

Dacă am pornit un timer, ar fi bine să-l și oprim, pentru aceasta ne vom folosi de referința intervalului, care e returnată la inițializare:

stopButton.addEventListener('click', function() {
    clearInterval(timerRef)
})

results matching ""

    No results matching ""