![]() |
Índex |
Miguel A. Almarza
|
||||
|
És una combinació entre CSS i el model d'objectes, fonamentalment els objectes creats amb el modificador id per identificar-los i amb les propietats style que siguin accessibles.
Permet donar molta més interactivitat al HTML ja que podem canviar algunes parts de la pàgina després de tenir creat el document i visualitzat en el navegador.
El problema ens apareix per la diferència del tractament d'aquest objectes segons el navegador que executi el codi. És el mateix problema que amb els events.
Aquesta etiqueta permet crear una capa amb un id que serà el seu nom d'objecte i amb un conjunt de propietats que s'escriuen dins de l'style de l'etiqueta.
Prem en aquest enllaç i veuràs les capes de l'exemple següent:
Capes i propietats de les capes. |
<body> <div id="capaVerda" style="position:absolute; left:124px; top:89px; width:348px; height:102px; z-index:1; background-color: #99CC00; layer-background-color: #99CC00; "> Aquesta capa és verda. Pot contenir tot el codi HTML que necessitem. </div> <div id="capaBlava" style="position:absolute; left:125px; top:237px; width:347px; height:218px; z-index:2; background-color: #CCFFFF; layer-background-color: #CCFFFF;"> <p>Capa blava</p> <div id="capaInterna" style="position:relative; left:50px; top:30px; width:100px; height:100px; z-index:3 background-color: #CCFFFF; layer-background-color: #CCCCFF; background-color: #CCCCFF;"> Contingut de la capa interna </div> </div> </body> |
Tenim tres capes. El seu id és capaVerda, capaBlava i capaInterna. Amb aquests noms es crea dins del document els objectes corresponents amb els valors de les propietats que s'indiquen dins de la propietat style. Cal dir que els objectes capa tenen moltes més propietats.
L'atribut id és l'atribut que donarà nom als objectes per fer DHTML
Amb aquests noms podem després demanar una referència a l'objecte capa des de el JavaScript i canviar, amb la referència, les propietats de la capa.
La propietat position de l'objecte style (atribut de la capa) pot tenir dos valors, absolute i relative.
Executa l'enllaç següent script i observa el seu funcionament.
DHTML amb l'Internet Explorer . |
<html> <head> <title>Documento sin título</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <style> .estilo1 { position:absolute; top:200px; visibility:visible; background-color:#00FFFF; color:#669900; font-size:18px; } </style> <script type="text/javascript"> function cambia() { objeto=document.getElementById("miParrafo"); |
Aquest script funciona amb l'Internet Explorer i amb el Mozilla. Tenim una capa anomenada miParrafo. Observa la instrucció
objeto=document.getElementById("miParrafo");
que obté una referència a l'objete miParrafo i la posa a la variable objeto. Amb aquesta referència canviem les propietats de l'etiqueta DIV.
nuevoTexto = document.createTextNode("El contenido ha cambiado."); objeto.replaceChild(nuevoTexto, objeto.childNodes[0]);Hem de crear un objecte de tipus TextNode i reemplacem aquest text en el nostre objecte.
nuevoTexto.deleteData(0,nuevoTexto.length); nuevoTexto.appendData("He cambiado colores y posición."); if (IE) objeto.replaceChild(nuevoTexto, objeto.childNodes[0]);Veiem que hi ha una diferència entre els navegadors. Es deu al fet que la funció replaceChild rep les dades per valor o per referència segons el navegador.
objeto.style.top="100px"; objeto.style.color="#ff0000"; objeto.style.backgroundColor="#cccccc"; objeto.style.visibility="hidden";
La funció setInterval permet definir una funció que s'executarà cada cop que hagin passat el nombre de milisegons que li passem. Torna un punter que ens servirà per eliminar aquesta definició amb la funció clearInterval. Observa el funcionament del programa enllaçat.
Quan executem el botó Pon alerta s'executa la instrucció
puntero=setInterval("muestraAlerta()",tiempo);
que farà que la funció muestraAlerta() s'executi cada cop que passi el temps indicat a la variable tiempo. Tenim un punter anomenat puntero amb el retorn de la funció setInterval, per tal de poder desfer aquesta assignació de funció. Per alliberar aquesta funció utilitzem la instrucció
clearInterval(puntero);
Les funcions setInterval i clearInterval . |
<html> <head> <title>Poner una alerta</title> <script type="text/javascript"> var puntero =null; function ponAlerta() { tiempo = document.frmAlerta.txtTiempo.value; tiempo = parseInt(tiempo); puntero=setInterval("muestraAlerta()",tiempo); } function muestraAlerta() { alert(document.frmAlerta.txtTexto.value); } function quitaAlerta() { clearInterval(puntero); } </script> </head> <body> <form name="frmAlerta" > <table bgcolor="#00FFFF" cellpadding="2px"> <tr bgcolor="#FFFFCC"> <td align="right">Tiempo para la alerta en milisegundos</td> <td><input name="txtTiempo" type="text" id="txtTiempo" size="4"></td> </tr> <tr bgcolor="#FFFFCC"> <td align="right">Texto para la alerta</td> <td><input name="txtTexto" type="text" id="txtTexto"></td> </tr> <tr bgcolor="#6666FF"> <td colspan="2" align="right"> <input name="btnPonerEnMarcha" type="button" value="Pon alerta" onClick="ponAlerta();"> <input name="btnQuitaAlerta" type="button" value="Quita alerta" onClick="quitaAlerta()"> </td> </tr> </table> </form> </body> </html> |
Observa el rellotge i els dos botons que l'engegen i l'aturen:
Ara farem un rellotge combinant les técniques de DHTML setInterval in canvi de propietats d'una taula. Per tal d'organitzar el codi l'hem dividit en tres fitxers:
Reloj.htm |
<html> <head> <title>Muestra de relojes</title> <script type="text/javascript" src="navegador.js"></script> <script type='text/javascript' src="reloj.js"></script> </head> <body> <div id='capaReloj1'> </div> <script type="text/javascript"> reloj1 = new relojSencillo('capaReloj1'); reloj1.engega('capaReloj1'); </body> </html> |
reloj.js |
//Este reloj necesita una capa para salida de datos function relojSencillo() { this.relId=null; this.relEngegat = false; this.mostraHoraRel=mostraHoraRel; this.atura=atura; this.engega=engega; } function atura() { if(this.relEngegat) clearInterval(this.relID); this.relEngegat = false; } function engega(idSalida) { this.atura(); this.relID=setInterval("mostraHoraRel('"+idSalida+"')",1000); this.relEngegat = true; } function mostraHoraRel(idSalida) { var ara = new Date(); var hora = ara.getHours(); var minutos = ara.getMinutes(); var segundos = ara.getSeconds(); var valorHora = "" + ((hora > 12) ? hora - 12 : hora); valorHora += ((minutos < 10) ? ":0" : ":") + minutos; valorHora += ((segundos < 10) ? ":0" : ":") + segundos; if (IE) document.all[idSalida].innerHTML = valorHora; if (NE6) document.getElementById(idSalida).innerHTML = valorHora; } |
Cal destacar les dues instruccions de sortida de dades cap a una capa
if (IE) document.all[idSalida].innerHTML = valorHora; if (NE6) document.getElementById(idSalida).innerHTML = valorHora;
Veiem com s'utilitza la propietat innerHTML que ens permet canviar tot el contingut HTML d'una capa. També veiem la forma de fer-ho en els dos navegadors més importants.