Diferència entre revisions de la pàgina «M06 UF1Pr3. Objecte Clock»

De wikijoan
Salta a la navegació Salta a la cerca
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

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