Pro ₧ivΘ prohlΘdnutφ ukßzek v prohlφ₧eΦi budete pot°ebovat prohlφ₧eΦ Internet Explorer 4.0. V ostatnφch prohlφ₧eΦφch nebude zobrazenφ mo₧nß zcela podle vaÜich p°edstav.
display
na hodnotu none
. Celß zprßva se
zobrazφ a₧ po najetφ myÜφ na jeho nßzev. Navφc se nadpis zobrazenΘ
zprßvy barevn∞ zv²raznφ. Podobn² mechanismus m∙₧eme pou₧φt i pro
n∞kolika·rov≥ovΘ seznamy, kterΘ umo₧nφme postupn∞ rozbalovat do ni₧Üφch
·rovnφ.
<HTML> <HEAD> <TITLE>Aktuality z Computerworldu</TITLE> <SCRIPT LANGUAGE="JavaScript"> <!-- function Display(elementID) { var id; id = "Zprava" + elementID; document.all.item(id).style.display = ""; id = "Nadpis" + elementID; document.all.item(id).style.color = "red"; } function Undisplay(elementID) { var id; id = "Zprava" + elementID; document.all.item(id).style.display = "none"; id = "Nadpis" + elementID; document.all.item(id).style.color = "black"; } // --> </SCRIPT> </HEAD> <BODY> <DIV ALIGN=CENTER> <IMG SRC=cw.gif ALT="Computerworld"><BR> MyÜφ naje∩te nad titulek zprßvy, kterou si chcete p°eΦφst. </DIV> <DIV onMouseOver="Display('1')" onMouseOut="Undisplay('1')"> <H1 ID=Nadpis1>Network Publishing</H1> <DIV ID=Zprava1 STYLE="display: none"> <P>Vedoucφ p°edstavitelΘ spoleΦnosti Live Picture zaΦali hovo°it o "network publishingu". John Sculley z Live Picture °ekl, ₧e revoluce bude srovnatelnß s tφm, co se ve sv∞t∞ DTP d∞lo (zejmΘna pod k°φdly MacOS) ve 2. polovin∞ 80. let. Velk² v²znam by m∞l mφt formßt FlashPix a Internet Imaging Protocol, kter² spoleΦn∞ vyvinuly firmy Live Picture, Eastman Kodak, Hewlett-Packard a Microsoft. </DIV> </DIV> <DIV onMouseOver="Display('2')" onMouseOut="Undisplay('2')"> <H1 ID=Nadpis2>Freedom Of Choice</H1> <DIV ID=Zprava2 STYLE="display: none"> <P>SpoleΦnost Netscape oznßmila zßm∞r zm∞nit stav, kdy podφl jejφho browseru na trhu klesß. Po rozhodnutφ soudu o nep°φpustnosti vßzat instalaci Windows 95 na Internet Explorer, zahajuje Netscape p°edevÜφm na Internetu mohutnou reklamnφ kampa≥ pojmenovanou "Freedom Of Choice". P°edstavitelΘ spoleΦnosti ·dajn∞ zva₧ujφ i mo₧nost, ₧e nap°. separovan² Navigator by mohl b²t Üφ°en zdarma. </DIV> </DIV> <DIV onMouseOver="Display('3')" onMouseOut="Undisplay('3')"> <H1 ID=Nadpis3>SQW 2.0</H1> <DIV ID=Zprava3 STYLE="display: none"> <P>SpoleΦnost Corpus oznßmila verzi 2.0 svΘho v²vojovΘho prost°edφ SQW. Nejv∞tÜφ zlepÜenφ oproti p°edeÜlΘ verzi by m∞lo spoΦφvat ve zv²Üenφ rychlosti provozu dynamicky generovan²ch databßzov²ch aplikacφ. </DIV> </DIV> </BODY> </HTML>
VÜimn∞me si, ₧e jednotlivΘ zprßvy jsou obsa₧eny v elementu
DIV
, aby pro n∞ Ülo nastavit spoleΦnΘ reagovßnφ na
udßlosti. Na ukßzce je rovn∞₧ vid∞t, jakΘ ·spory p°inßÜφ pou₧φvßnφ
funkcφ a jejich parametrizovßnφ.
Definovali jsme dv∞ funkce -- Display()
a
Undisplay()
. Ob∞ jako parametr oΦekßvajφ Φφslo zprßvy.
Display()
zobrazφ obsah zprßvy a zv²raznφ jejφ nadpis.
Nadpisy musφ mφt rovn∞₧ p°i°azeny sprßvnΘ ID
.
Undisplay()
se volß po opuÜt∞nφ elementu myÜφ a text zprßvy
schovß a barvu nadpisu nastavφ zp∞t na Φernou.
P°i vytvß°enφ dynamick²ch strßnek bychom m∞li mφt na pam∞ti, ₧e ne vÜichni pou₧φvajφ k prohlφ₧enφ naÜφ strßnky nejnov∞jÜφ v²st°elky browserovΘ technologie. Strßnku s dynamick²m HTML navrhujeme tak, aby se korektn∞ zobrazila i v prohlφ₧eΦφch bez podpory dynamickΘho HTML. Nenφ to nic t∞₧kΘho. NaÜe ukßzkovß strßnka tyto vlastnosti spl≥uje.
Abychom nemuseli p°ed∞lßvat cel² dokument a u ka₧dΘho odkazu psßt
obsluhu udßlosti, vyu₧ijeme dalÜφ zajφmav² objekt z objektovΘ
hierarchie. Objekt window.event.srcElement
odpovφdß elementu,
ke kterΘmu se vß₧e aktußln∞ zpracovßvanß udßlost.
Udßlosti vyvolßvajφcφ zv²razn∞nφ odkaz∙ nastavφme pro cel²
dokument u elementu BODY
. V obsluze udßlosti si pak
zkontrolujeme, zda element, nad kter²m je myÜ, je odkaz (A
).
Pokud ano, odkaz zv²raznφme, p°φpadn∞ mu vrßtφme p∙vodnφ barvu.
V dokumentu pak m∙₧eme mφt odkaz∙ kolik chceme, barevn∞
zv²raz≥ovat se budou vÜechny.
<HTML> <HEAD> <TITLE>Strßnka s aktivnφmi odkazy</TITLE> <STYLE TYPE="text/css"> <!-- :link { color: blue } --> </STYLE> <SCRIPT LANGUAGE="JavaScript"> <!-- function HighlightAnchor() { if (window.event.srcElement.tagName == "A") window.event.srcElement.style.color = "red"; } function LowlightAnchor() { if (window.event.srcElement.tagName == "A") window.event.srcElement.style.color = "blue"; } // --> </SCRIPT> </HEAD> <BODY onMouseOver="HighlightAnchor()" onMouseOut="LowlightAnchor()"> zde m∙₧e b²t zcela libovoln² dokument </BODY> </HTML>
window.setInterval("funkce", ms)
.
Funkce zadanß prvnφm parametrem se vyvolß ka₧d²ch ms
milisekund.
My vytvo°φme strßnku, na kterΘ se bude od okraj∙ obrazovky
odrß₧et obrßzek zem∞koule. O pohyb obrßzku zem∞koule a jeho
odrß₧enφ od okraj∙ se starß funkce Move()
, kterß je volanß
v pravideln²ch intervalech. Funkce skriptu by m∞la b²t z°ejmß
z komentß°∙:
<HTML> <HEAD><TITLE>DynamickΘ HTML -- odrß₧ejφcφ se logo</TITLE> <SCRIPT LANGUAGE="JavaScript"> <!-- var id, // pomocnß prom∞nnß pro ΦasovaΦ stepX, stepY; // krok v X a Y-sm∞ru function Start() // spuÜt∞nφ pohybu { // umφst∞nφ obrßzku doprost°ed obrazovky document.all.Logo.style.pixelLeft = document.body.offsetWidth / 2; document.all.Logo.style.pixelTop = document.body.offsetHeight / 2; // obrßzek ud∞lßme viditeln² document.all.Logo.style.visibility = "visible"; // nßhodnß inicializace sm∞ru a rychlosti pohybu stepX = (Math.random()+5) * 2 - 5; stepY = (Math.random()+5) * 2 - 5; // nastavenφ ΦasovaΦe id = window.setInterval("Move()",50); } function Stop() // ukonΦenφ pohybu { // vypnutφ ΦasovaΦe window.clearInterval(id); // "schovßnφ obrßzku" document.all.Logo.style.visibility = "hidden"; } function Move() // posun loga { // posunutφ obrßzku document.all.Logo.style.pixelLeft += stepX; document.all.Logo.style.pixelTop += stepY; // odra₧enφ od levΘho okraje if (document.all.Logo.style.pixelLeft <= 0) stepX = -stepX; // odra₧enφ od pravΘho okraje if ( document.all.Logo.style.pixelLeft >= (document.body.offsetWidth - document.all.Logo.width - stepX - 22) ) stepX = -stepX; // 22 je magickΘ Φφslo Üφ°ky scroll-baru // odra₧enφ od hornφho okraje if (document.all.Logo.style.pixelTop <= 0) stepY = -stepY; // odra₧enφ od dolnφho okraje if ( document.all.Logo.style.pixelTop >= (document.body.offsetHeight - document.all.Logo.height - stepY) ) stepY = -stepY; } // --> </SCRIPT> </HEAD> <BODY onload="Start()"> <IMG ID="Logo" STYLE="visibility: hidden; position: absolute; z-index:-1" SRC="earth.gif" onClick="Stop()"> <H1>A p°ece se toΦφ...</H1> Animaci m∙₧ete zastavit kliknutφm na naÜi milou planetu. </BODY> </HTML>
U obrßzku jsme vlastnost z-index
nastavili na -1, aby
se obrßzek pohyboval pod textem strßnky.
Pokud si d∙kladn∞ prohlΘdnete v²sledek, zjistφte, ₧e se navφc Zem∞ otßΦφ okolo svΘ osy. Nepou₧ili jsme toti₧ obyΦejn² obrßzek, ale animovan² GIF, kter² se postarß o rotaci naÜφ milΘ planety.
Strßnky, kterΘ jsou moc ₧ivΘ, mohou n∞kter²m u₧ivatel∙m vadit, proto₧e je ruÜφ p°i Φtenφ. M∞li bychom proto pou₧φvat krßtkΘ animace nebo nabφzet viditeln² zp∙sob, jak animace ukonΦit.
<HTML> <HEAD> <TITLE>Ukßzka alfa-filtru</TITLE> <SCRIPT LANGUAGE="JavaScript"> <!-- var id, op = 100, // poΦßteΦnφ pr∙hlednost step = -10; // krok function Start() { id = window.setInterval("Move()", 50); } function Stop() { window.clearInterval(id); } function Move() { op += step; if (op < 0) { op = 0; step = -step; }; if (op > 100) { op = 100; step = -step; }; document.all.img1.filters.Alpha.opacity = op; document.all.img2.filters.Alpha.opacity = 100-op; } // --> </SCRIPT> </HEAD> <BODY> <IMG ID=img1 SRC=tiger1.gif onMouseOver="Start()" onMouseOut="Stop()" STYLE="position: absolute; top: 10px; left: 10px; z-index: 2; filter: Alpha(Opacity=100)"> <IMG ID=img2 SRC=tiger2.gif STYLE="position: absolute; top: 10px; left: 10px; z-index: 1; filter: Alpha(Opacity=0)"> </BODY> </HTML>
Druhou mo₧nostφ, kterou p°i p°echodu z jednoho elementu v druh²
nabφzejφ filtry, jsou p°echodovΘ filtry. P°echodov² filtr se jmenuje
revealTrans
a pracuje se s nφm pon∞kud odliÜn∞ ne₧ s
ostatnφmi filtry. Filtr mß dva parametry -- typ p°echodu
(transition
) a dobu p°echodu (duration
). U
elementu, kter² chceme zm∞nit nejprve nastavφme typ p°echodu a dobu
p°echodu. PotΘ zavolßme metodu Apply()
filtru. Ta p°ipravφ
vÜe pot°ebnΘ pro provedenφ p°echodu. Nynφ pomocφ vlastnosti
innerText
(nebo src
u obrßzk∙) p°i°adφme
elementu nov² obsah. P°echod pak spustφme vyvolßnφm metody
Play()
. Ta spustφ p°echod a pou₧ije p°itom zadan² typ
p°echodu. IE 4.0 podporuje 23 p°echod∙ (typy 0--22). P°echod Φφslo 23 je
nßhodn² a vybere jeden z p°edchozφch typ∙.
P°echod m∙₧eme kdykoliv okam₧it∞ ukonΦit pomocφ metody Stop()
.
Pokud chceme n∞jakou Φinnost navßzat na skonΦenφ p°echodu,
vyu₧ijeme toho, ₧e po skonΦenφ p°echodu je vyvolßna udßlost
onFilterChange
.
VÜechny uvedenΘ skuteΦnosti si demonstrujeme na malΘ ukßzce. Vytvo°φme strßnku, kterß bude obsahovat ΦφtaΦ, kter² bude postupn∞ zobrazovat Φφsla od 20 do 0. P°i zm∞n∞ Φφsla se pou₧ije v₧dy nov² nßhodn∞ vybran² zp∙sob p°echodu.
<HTML> <HEAD> <TITLE>Ukßzka p°echodov²ch filtr∙</TITLE> <SCRIPT LANGUAGE="JavaScript"> <!-- var i=20; function Tick() { i--; if (i<0) { // ukonΦenφ odpoΦφtßvßnφ window.event.srcElement.onFilterChange = ""; return; } document.all.Counter.filters.revealTrans.transition = Math.round(Math.random()*23); // nßhodn² v²b∞r p°echodu document.all.Counter.filters.revealTrans.Apply(); document.all.Counter.innerText = i; document.all.Counter.filters.revealTrans.Play(); } // --> </SCRIPT> </HEAD> <BODY onLoad="Tick()"> <DIV ALIGN=CENTER> <DIV ID=Counter STYLE="height: 150px; width: 200px; text-align: center; background-color: blue; color: yellow; font: bold 140px Arial, sans-serif; filter: revealTrans(duration=1)" onFilterChange="Tick()"> 20 </DIV> </DIV> </BODY> </HTML>
P°echody vyvolßvß funkce Tick()
. Tu spustφme po naΦtenφ strßnky
a tφm zßrove≥ aktivujeme prvnφ p°echod. DalÜφ p°echody jsou ji₧ volßny
automaticky po dokonΦenφ p°edeÜlΘho p°echodu prßv∞ nastavenφm
obsluhy udßlosti onFilterChange
na funkci Tick()
.
Light
.
Ten umo₧≥uje nad jeden element umφstit a₧ deset sv∞teln²ch zdroj∙.
Zdroje sv∞tla r∙zn²m zp∙sobem nasv∞cujφ element a urΦujφ tak, kterß jeho
Φßst bude viditelnß.
IE 4.0 podporuje t°i druhy zdroj∙ sv∞tla: rovnom∞rn² (Ambient),
bodov² (Point) a ku₧elov² (Cone). Zdroje sv∞tla nelze definovat p°φmo
jako parametry filtru, musφ se p°idat a₧ p°φmo ve skriptu volßnφm metody
addAmbient
, addCone
nebo
addPoint
. NejjednoduÜφ je p°idßnφ rovnom∞rnΘho zdroje
sv∞tla:
addAmbient(R, G, B, intenzita)Parametry R, G a B urΦujφ intenzitu zßkladnφch slo₧ek barvy sv∞tla. Mohou nab²vat hodnot od 0 do 255. Celkovß intenzita sv∞telnΘho zdroje je urΦena pomocφ poslednφho celoΦφselnΘho parametru.
K p°idßnφ ku₧elovΘho zdroje sv∞tla pot°ebujeme zadat vφce parametr∙:
addCone(x1, y1, z1, x2, x2, R, G, B, intenzita, ·hel)Sou°adnice (x1, y1, z1) udßvajφ prostorovΘ sou°adnice zdroje sv∞tla, kter² svφtφ do bodu (x2, y2, 0). ·hel urΦuje vrcholov² ·hel vrhnutΘho ku₧elu sv∞tla. Ostatnφ parametry majφ stejn² v²znam jako u rovnom∞rnΘho zdroje sv∞tla.
P°idßnφ bodovΘho zdroje sv∞tla je velmi jednoduchΘ:
addPoint(x, y, z, R, G, B, intenzita)Po p°idßnφ sv∞tel m∙₧eme m∞nit jejich polohu pomocφ metody
moveLight
a vytvo°it tak vskutku p∙sobivΘ efekty:
moveLight(Φφslo_sv∞tla, x, y, z, true)Sv∞tla v jednom filtru jsou Φφslovßna od nuly podle po°adφ v jakΘm byla p°idßna.
PraktickΘ pou₧itφ zdroj∙ sv∞tla si ukß₧eme na malΘ ukßzce. Vytvo°φme strßnku s nßpisem. Nßpis bude ΦßsteΦn∞ viditeln² (dφky zdroji rovnom∞rnΘho sv∞tla) a bude p°es n∞j jezdit ku₧el sv∞tla, kter² v₧dy zviditelnφ osv∞tlenou Φßst nßpisu.
<HTML> <HEAD> <TITLE>DynamickΘ HTML -- sv∞telnΘ zdroje</TITLE> <STYLE TYPE="text/css"> <!-- BODY { color: white; background-color: black; text-align: center } #napis { position: relative; width: 700px; height: 80px; font: bold 60px Arial; filter: Light() } --> </STYLE> <SCRIPT LANGUAGE="JavaScript"> <!-- var MinX=0, MaxX=700, X=0, Y=40, Step=10, id; function Move() { // P°esun zdroje sv∞tla document.all.napis.filters.Light.moveLight(0, X, Y, 0, true); // Aktualizace X += Step; if (X >= MaxX) { Step = -Step; }; if (X <= MinX) { Step = -Step; }; } function Init() { document.all.napis.filters.Light.addCone((MinX+MaxX)/2, Y, 100, X, Y, 255, 255, 255, 100, 20); // Ku₧elov² zdroj sv∞tla document.all.napis.filters.Light.addAmbient(0, 0, 127, 100); // Rovnom∞rn² zdroj sv∞tla id = setInterval("Move()", 100); // Aktivace pohybu } // --> </SCRIPT> </HEAD> <BODY onLoad="Init()"> <DIV ID=napis>Computerworld</DIV> </BODY> </HTML>
┌vod | KaskßdovΘ styly | JavaScript | P°ehled vlastnostφ styl∙ | DHTML vs. Java