Diferència entre revisions de la pàgina «M06 UF1Pr3. Objecte Clock»
(→Ajuda) |
|||
| Línia 30: | Línia 30: | ||
Se't proporciona un codi inicial que et serveix de plantilla: | Se't proporciona un codi inicial que et serveix de plantilla: | ||
<pre> | <pre> | ||
| − | function Clock(hora=new Date().getHours()) { | + | function Clock(hora=new Date().getHours(), minut=new Date().getMinutes(), segon=new Date().getSeconds()) { |
this.hora = hora; | this.hora = hora; | ||
| + | this.minut = minut; | ||
| + | this.segon = segon; | ||
| + | this.sentit = true //true: endavant; false: endarrere | ||
this.ref = 0; //és la referència que retorna setInterval | this.ref = 0; //és la referència que retorna setInterval | ||
| + | this.reset = function() { this.atura(); this.set(0,0,0) } | ||
| + | this.set = function(hora, minut, segon) { this.hora = hora; this.minut = minut; this.segon = segon; } | ||
this.formata = function() { | this.formata = function() { | ||
let cad_segon = this.segon.toString(); | let cad_segon = this.segon.toString(); | ||
let cad_minut = this.minut.toString(); | let cad_minut = this.minut.toString(); | ||
| − | let cad_hora = this.hora.toString(); | + | let cad_hora = this.hora.toString(); |
| + | if (cad_segon.length==1) cad_segon = '0' + cad_segon; | ||
| + | if (cad_minut.length==1) cad_minut = '0' + cad_minut; | ||
| + | if (cad_hora.length==1) cad_hora = '0' + cad_hora; | ||
return cad_hora + ':' + cad_minut + ':' + cad_segon; | return cad_hora + ':' + cad_minut + ':' + cad_segon; | ||
} | } | ||
| Línia 71: | Línia 79: | ||
clearInterval(this.ref); | clearInterval(this.ref); | ||
}; | }; | ||
| + | |||
| + | this.pausa = function() { | ||
| + | clearInterval(this.ref); | ||
| + | }; | ||
| + | |||
} | } | ||
</pre> | </pre> | ||
| + | |||
==Joc de proves== | ==Joc de proves== | ||
Crea una petita pàgina web, amb diferents DIVs per ubicar diferents instàncies del rellotge, i testeja els diferents mètodes que has definit. | Crea una petita pàgina web, amb diferents DIVs per ubicar diferents instàncies del rellotge, i testeja els diferents mètodes que has definit. | ||
Revisió del 23:53, 31 oct 2021
Contingut
Introducció
Teoria que s'ha vist sobre els objectes de Javascript:
Desenvolupament
Crea l'objecte Clock, amb les següents propietats:
- hora
- minut
- segon
- sentit (true-endavant, false-endarrere)
- estat (true-arrencat, false-aturat)
I els següents mètodes:
- arrenca(sentit) (per defecte el sentit és endavant)
- atura()
- pausa()
- reset(): posa hora, minut i segon a 0, i atura si estigués arrencat.
- set(hora, minut, segon) posa hora, minut i segon als valors proporcionats.
- formata(): formata amb la cadena hh:mi:ss (2 dígits)
En el constructor passarem:
- hora, minut, segon (amb la possibilitat de què es passi l'hora, minut i segons actuals com a valors per defecte).
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
statements
}
Ajuda
La part més difícil són que les funcions setInternal i clearInterval funcionin correctament.
Se't proporciona un codi inicial que et serveix de plantilla:
function Clock(hora=new Date().getHours(), minut=new Date().getMinutes(), segon=new Date().getSeconds()) {
this.hora = hora;
this.minut = minut;
this.segon = segon;
this.sentit = true //true: endavant; false: endarrere
this.ref = 0; //és la referència que retorna setInterval
this.reset = function() { this.atura(); this.set(0,0,0) }
this.set = function(hora, minut, segon) { this.hora = hora; this.minut = minut; this.segon = segon; }
this.formata = function() {
let cad_segon = this.segon.toString();
let cad_minut = this.minut.toString();
let cad_hora = this.hora.toString();
if (cad_segon.length==1) cad_segon = '0' + cad_segon;
if (cad_minut.length==1) cad_minut = '0' + cad_minut;
if (cad_hora.length==1) cad_hora = '0' + cad_hora;
return cad_hora + ':' + cad_minut + ':' + cad_segon;
}
this.arrenca = function() {
if (this.estat==false) this.estat=true;
this.ref = setInterval(() => {
if (this.sentit) {
this.segon++;
if (this.segon==60) {
this.segon = 0;
this.minut += 1;
if (this.minut == 60) {
this.minut = 0;
this.hour += 1;
}
}
} else {
this.segon--;
if (this.segon==-1) {
this.segon = 59;
this.minut -= 1;
if (this.minut == -1) {
this.minut = 59;
this.hour -= 1;
}
}
}
}, 1000);
};
this.atura = function() {
if (this.estat==true) this.estat=false;
clearInterval(this.ref);
};
this.pausa = function() {
clearInterval(this.ref);
};
}
Joc de proves
Crea una petita pàgina web, amb diferents DIVs per ubicar diferents instàncies del rellotge, i testeja els diferents mètodes que has definit.
Interfície web (ToDo en la UF3)
Més endavant (UF3), es farà una interfície amb botons per tal d'arrencar, aturar i fer reset del rellotge, i un checkbox que determini el sentit (endavant o endarrere). També un botó + i un botó - per incrementar o decrementar el rellotge.
Tasques
Consola
- Fes un joc de proves mínim per comprovar el bon funcionament de les teves instàncies de rellotge.
Pàgina web
- DIV1: instància de Clock amb els valors actuals de Date(). Arrencar el Clock.
- DIV2: instància de Clock amb els valors (hora: 00; minut: 00: segon: 00). Quan el primer Clock (DIV1) porti 10 segons en funcionament, aquest Clock arrenca com a cronòmetre.
- DIV3: temporitzador. Instància de Clock amb els valors (hora: 00; minut: 05: segon: 00). El temporitzador arrenca anat endarrere. Implementem la següent regla: mentre el segon rellotge té minuts parells, aquest tercer rellotge entra en mode pausa.
Solució
(encara no)
Entrega
creat per Joan Quintana Compte, octubre 2021