Navigace

Hlavnφ menu

 

SMIL - tvorba prezentace v praxi

V tomto Φlßnku si koneΦn∞ p°edvedeme tvorbu multimedißlnφ prezentace se vÜφm, co k nφ pat°φ, na praktickΘm p°φklad∞. Vyu₧ijeme p°i tom v∞tÜinu informacφ, kterΘ jsme shromß₧dili v p°edchozφch Φlßncφch, rozhodn∞ tedy nezaÜkodφ, pokud si je p°eΦtete nebo alespo≥ osv∞₧φte v pam∞ti.

P°ed tφm, ne₧ webdesignΘr zaΦne s tvorbou prezentace, m∞l by se rozhodnout, jak² formßt zvolφ. My pomineme program PowerPoint a dalÜφ jemu podobnΘ, tak₧e nßm z∙stanou dv∞ mo₧nosti:

  1. Vytvo°it prezentaci v jazyce SMIL. Bude ji mo₧no zobrazit v n∞kter²ch multimedißlnφch p°ehrßvaΦφch (Apple Quick Time Player, Real Player, Adobe SVG Player).
  2. Pou₧φt formy HTML+TIME. Tφm vznikne prezentace, kterou bude mo₧nΘ zobrazit v internetovΘm prohlφ₧eΦi (Microsoft Internet Explorer 5.5 a vyÜÜφ).

Rozhodnutφ mezi t∞mito formßty je pon∞kud z·₧enΘ faktem, ₧e ka₧d² typ prezentace je urΦen pro jinΘ za°φzenφ. M∙₧eme se vÜak rozhodovat alespo≥ zßvisle na rozÜφ°enφ p°ehrßvaΦ∙ a prohlφ₧eΦ∙. Microsoft Internet Explorer 5.5 a 6.0 je momentßln∞ (9/2004) nejrozÜφ°en∞jÜφm prohlφ₧eΦem. Oproti tomu Apple Quick Time Player je obvykl²m p°ehrßvaΦem pro platformu Apple, zatφmco Real Player moc rozÜφ°en² nenφ (jde o obdobu Winampu Φi Windows Media Playeru). Dßle je t°eba si uv∞domit, kolik u₧ivatel∙ je schopno zobrazit prezentaci vytvo°enou v PowerPointu - nenφ jich sice tolik, ale prohlφ₧eΦ pro tento formßt je dostupn² zdarma (podporuje verze PowerPoint 97, 2000, 2002 a 2003).

Potr₧eno a seΦteno, v∞tÜin∞ u₧ivatel∙ vyjdete vst°φc formßtem HTML+TIME, avÜak bude-li existovat tΘ₧ obdoba ve formßtu SMIL, vaÜe prezentace bude Φitelnß pro jeÜt∞ v∞tÜφ Φßst u₧ivatel∙. A o to se dnes pokusφme, vytvo°φme krßtkou prezentaci ve SMILu a nßsledn∞ ji vytvo°φme tΘ₧ v HTML+TIME. K dispozici jsou vßm ob∞ prezentace vΦetn∞ obrßzk∙ v ZIP archivu.

Prezentace ve SMILu a prezentace v HTML+TIME se neliÜφ jen koncov²m za°φzenφm, ale existujφ mezi nimi jeÜt∞ dalÜφ d∙le₧itΘ rozdφly. Prezentace ve SMILu musφ b²t validnφ, jinak ji p°ehrßvaΦ nenφ schopen p°ehrßt. To neplatφ pro HTML+TIME v Microsoft Internet Exploreru, i kdy₧ ani ta by samoz°ejm∞ nem∞la obsahovat chyby. DalÜφm rozdφlem jsou textovΘ prvky, SMIL pracuje s textem jak s objektem, proto musφ b²t veÜker² pou₧φvan² text ulo₧en s koncovkou .txt, p°φpadn∞ .html (webovß strßnka, avÜak ta je pro n∞kterΘ p°ehrßvaΦe neΦitelnß). HTML+TIME pracuje s textem naprosto normßln∞. Tak₧e za fungujφcφ prezentacφ ve SMILu se skr²vß vφce prßce ne₧ za toutΘ₧ prezentacφ ve formßtu HTML+TIME, je vÜak kvalitn∞jÜφ a do budoucna i p°φstupn∞jÜφ.

Pracovnφ postup

VÜe u₧ jsme rozhodli, nynφ pot°ebujeme vytvo°it dv∞ podobnΘ prezentace v rozdφln²ch formßtech. Ideßlnφ je zaΦφt s prezentacφ ve SMILu a teprve od nφ odvodit prezentaci napsanou v HTML+TIME. Jde o zcela logick² postup, HTML+TIME vychßzφ ze SMILu, ne naopak. Jak si prezentaci navrhnete, je na vßs, ale nejlepÜφ je asi prezentaci rozkreslit na papφr - polohy jednotliv²ch objekt∙ a jejich animacφ (z kterΘho sm∞ru p°ijedou), jednotlivΘ Φasy je nejlepÜφ nechat na koneΦnΘm dojmu.

Jak bude vypadat hotovß prezentace

NaÜe prezentace bude sestßvat ze t°φ oken (snφmk∙), kterΘ se budou v urΦitΘm ΦasovΘm intervalu m∞nit. Prvnφ a druhΘ okno bude tvo°eno Φty°mi objekty - dva nadpisy a dva odstavce textu. Tyto prvky p°ijedou do prezentace, tak jak je vyznaΦeno na obrßzku:

Nßhled prezentace

Prvnφ okno skonΦφ zmizenφm nadpisu a odstavc∙. Podobn∞ jako v p°φpad∞ prvnφho okna p°ijede nov² nadpis a dva odstavce textu. Nakonec se i tyto prvky "vypa°φ", hlavnφ nadpis odjede sm∞rem nahoru a namφsto p∙vodnφch podnadpis∙ p°ijede hypertextov² odkaz. Tφm je celß prezentace zavrÜena.

Prezentace ve SMILu

Nynφ se pokusφme vytvo°it prezentaci ve SMILu, fungujφcφ v p°ehrßvaΦi RealPlayer. Prvnφm ·kolem je navr₧enφ region∙ (ploch, ve kter²ch se budou zobrazovat jednotlivΘ objekty). Zde nesmφme zapomenout na velikosti, polohy a p°φpadn∞ barvy. V naÜem p°φpad∞ bude k≤d vypadat takto:

<!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 2.0//EN" "http://www.w3.org/2001/SMIL20/Language">
<smil xmlns="http://www.w3.org/2001/SMIL20/Language" xmlns:rn="http://features.real.com/2001/SMIL20/Extensions" xmlns:md="http://www.inrialpes.fr/tienthinh/dtd/madeus">
<head>
<layout type="text/smil-basic-layout">
   <root-layout width="500" height="300" background-color="#ffffff" />
   <region id="logo" left="0" top="0" z-index="20" height="40" width="500"></region>
   <region id="nadpis" left="120" top="80" z-index="20" height="20" width="300"></region>
   <region id="list1" z-index="20" height="60" width="300"></region>
   <region id="list2" z-index="20" height="60" width="300"></region>
</layout>
</head>
<body>

Druh²m ·kolem je p°φprava vÜech objekt∙ - obrßzky a hlavn∞ texty. S texty je za nyn∞jÜφ situace trochu potφ₧, nelze je doplnit stylem (XHTML+CSS), v∞tÜina p°ehrßvaΦ∙ si s nimi nevφ rady. Proto vyu₧ijeme pouze "suchΘ" soubory *.txt. Mo₧n²m °eÜenφm by bylo p°evedenφ text∙ na obrßzky, co₧ ale odporuje p°ednostem SMILu (indexace obsahu a podobn∞).

T°etφm ·kolem je sestavenφ t∞la dokumentu - jednotlivΘ objekty posklßdat na Φasovou osu. NaÜe prezentace nenφ nijak slo₧itß a tak postaΦφ vÜe uzav°φt do jednoho prvku pa a vÜechny prvky se p°ehrajφ hezky popo°ßdku:

<par>
   <img id="smil-logo" region="logo" dur="24.5s" begin="0s" src="smil-logo.gif">
      <animateMotion targetElement="logo" from="20,-1" to="20,30" fill="hold" dur="1s" begin="0s" />
      <animateMotion targetElement="logo" begin="23s" dur="1.5s" to="20,-100" />
   </img>

   <text src="nadpis1.txt" region="nadpis" begin="2s" dur="9">
      <animateMotion targetElement="nadpis" from="501,80" to="120,80" fill="hold" dur="1s" begin="0s" />
   </text>

   <text src="list1.txt" region="list1" begin="3.5s" dur="7.5">
      <animateMotion targetElement="list1" from="501,120" to="140,120" fill="hold" dur="2s" begin="0s" />
   </text>

   <text src="list2.txt" region="list2" begin="5s" dur="6">
      <animateMotion targetElement="list2" from="501,175" to="140,175" fill="hold" dur="2s" begin="0s" />
   </text>

   <text src="nadpis2.txt" region="nadpis" begin="12s" dur="9">
      <animateMotion targetElement="nadpis" from="501,80" to="120,80" fill="hold" dur="1s" begin="0s" />
   </text>

   <text src="list3.txt" region="list1" begin="13.5s" dur="7.5">
      <animateMotion targetElement="list1" from="501,120" to="140,120" fill="hold" dur="2s" begin="0s" />
   </text>

   <text src="list4.txt" region="list2" begin="15s" dur="6">
      <animateMotion targetElement="list2" from="501,175" to="140,175" fill="hold" dur="2s" begin="0s" />
   </text>

   <a href="http://www.w3.org" show="new">
      <text begin="25" dur="4s" src="nadpis3.txt" region="nadpis">
         <animateMotion targetElement="nadpis" from="501,80" to="120,80" fill="hold" dur="1s" begin="0s" />
      </text>
   </a>
</par>
</body>
</smil>

Prvek animateMotion vytvß°φ plynul² posun ze sou°adnic dan²ch atributem "from" na sou°adnice danΘ atributem "to". U ka₧dΘho objektu je t°eba urΦit atribut "region", kter²m je urΦena vyhrazenß plocha objektu, a dßle atributy "begin" a "dur" - zde budete muset trochu poΦφtat, aby vÜe vychßzelo tak, jak mß. Uvnit° prvku par urΦujφ atributy "begin" Φas od zaΦßtku ΦasovΘ osy, p°iΦem₧ platφ pravidlo, ₧e pokud majφ dva objekty stejn² souΦet atribut∙ "begin" a "dur", zmizφ souΦasn∞. Prezentace ve SMILu je tφmto ·sp∞Ün∞ dokonΦena.

Prezentace v HTML+TIME

Tvorba prezentace v HTML+TIME se moc neliÜφ od vytvo°enφ strßnky v XHTML. Ve stylopisu nesmφte zapomenout na prvky jazyka SMIL:

t\:*{behavior:url(#default#time2);position:absolute}
.time{behavior:url(#default#time2);position:absolute}

Jak vytvo°φte stylopis je jen a jen na vßs, pouze doporuΦuji doplnit vÜem animovan²m textov²m prvk∙m vlastnost "width" (Üφ°ku), jinak m∙₧e dojφt k nep°φjemnΘmu skßkßnφ textu v pr∙b∞hu animace (plocha jim vyhrazenß se zv∞tÜuje nebo naopak zmenÜuje) a nastavit absolutnφ pozici (aby s nimi bylo mo₧nΘ h²bat).

Hlavnφm ·kolem je transformovat t∞lo SMIL prezentace do HTML+TIME. Zde je t°eba dodr₧et n∞kolik pravidel - oznaΦit jmennou prostorou vÜechny prvky SMILu (nap°φklad <t:par>) a prvk∙m (X)HTML, kterΘ budou mφt n∞co spoleΦnΘho s prezentacφ, nastavit t°φdu time. Pokud toto dodr₧φte, mßte skoro vyhrßno. Poslednφ zßludnost je spojena s animacφ (X)HTML prvk∙, nap°φklad animace nadpisu vypadß nßsledovn∞:

<h2 begin="2s" id="nadpis" class="time" dur="9">Zßkladnφ informace:</h2>
<t:animateMotion targetElement="nadpis" begin="2s" dur="1s" fill="hold" from="600,80" to="120,80" />

Rozdφl oproti SMILu je patrn², animace nenφ uvnit° elementu h2, naopak je umφst∞na mimo n∞j a je t°eba ji doplnit atributem "begin" (se stejnou hodnotou jako u nadpisu), aby se mohla k nadpisu p°ipojit. To by bylo vÜe k teorii, zde je p°eklad:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
   <xml:namespace prefix="t"/>
   <meta http-equiv="content-type" content="text/html; charset=windows-1250" />
   <meta http-equiv="Content-language" content="cs" />
   <title>SMIL Prezentace</title>
   <style type="text/css" media="all">
   t\:*{behavior:url(#default#time2);position:absolute}
   .time{behavior:url(#default#time2);position:absolute}
   #prezentace{
   position:absolute;left:160px;top:100px;
   border:1px solid #ff8000;
   width:500px;
   height:300px;
   text-aling:center;
   font-family:Verdana;
   font-size:1em;
   color:#8ca3fd
   }
   h2{
   font-size:1.1em;
   font-weight:normal;
   color:#7d7dff
   }
   #list1,#list2,#list3,#list4{
   width:300px;
   }
   a:link{
   color:#7d7dff;
   }
   a:hover{
   color:#b9b9b9;
   }
   a:visited{
   color:#7d7dff
   }
   </style>
</head>
<body>
<div id="prezentace">
<par begin="0">
   <t:img src="smil-logo.gif" id="logo" dur="24.5s" alt="SMIL logo" />
   <t:animateMotion targetElement="logo" dur="1.5s" fill="hold" from="30,-100" to="30,20" />
   <t:animateMotion targetElement="logo" begin="23s" dur="1.5s" to="0,-100" />
</par>
<par id="prvni">
   <h2 begin="2s" id="nadpis" class="time" dur="9">Zßkladnφ&nbsp;informace:</h2>
   <t:animateMotion targetElement="nadpis" begin="2s" dur="1s" fill="hold" from="600,80" to="120,80" />

   <span begin="3.5s" id="list1" class="time" dur="7.5">Jazyk SMIL umo₧≥uje tvorbu multimedißlnφch prezentacφ</span>
   <t:animateMotion targetElement="list1" begin="3.5s" dur="2s" fill="hold" from="600,120" to="140,120" />

   <span begin="5s" id="list2" class="time" dur="6">Podpora SMILu je zajiÜt∞na v multimedißlnφch p°ehrßvaΦφch Apple Quick Time Player a Real Player</span>
   <t:animateMotion targetElement="list2" begin="5s" dur="2s" fill="hold" from="600,175" to="140,175" />
</par>
<par id="druha">
   <h2 id="nadpis2" begin="12" class="time" dur="9">Mo₧nosti&nbsp;SMILu:</h2>
   <t:animateMotion targetElement="nadpis2" begin="12" dur="1s" fill="hold" from="600,80" to="120,80" />

   <span id="list3" begin="13.5" class="time" dur="7.5">SMIL 1.0 umo₧≥uje zobrazovßnφ multimedißlnφch objekt∙ na ΦasovΘ ose a jejich synchronizaci</span>
   <t:animateMotion targetElement="list3" begin="13.5" dur="2s" fill="hold" from="600,120" to="140,120" />

   <span id="list4" begin="15s" class="time" dur="6">SMIL 2.0 rozÜi°uje mo₧nosti SMILu 1.0 zejmΘna o animaΦnφ prvky</span>
   <t:animateMotion targetElement="list4" begin="15s" dur="2s" fill="hold" from="600,190" to="140,190" />
</par>
<par id="treti">
   <h2 id="nadpis3" begin="25s" class="time" dur="4s">Vφce&nbsp;na&nbsp;<a href="http://www.w3.org">http://www.w3.org</a></h2>
   <t:animateMotion targetElement="nadpis3" begin="25s" dur="1s" fill="hold" from="600,80" to="120,80" />
</par>
</div>

</body
</html>

Neexisuje ₧ßdn² nßvod, jak automaticky p°evΘst prezentaci ve SMILu do HTML+TIME. V₧dy musφte vzφt v ·vahu rozdφly mezi SMILem a HTML+TIME, kterΘ jsou danΘ r∙zn²m p°φstupem, proto₧e SMIL obsahuje celkem samoz°ejm∞ nesΘmantickΘ informace (velikosti, polohy, barvy, regiony a dalÜφ) a ty je nutno nahradit pomocφ CSS. SMIL pracuje s textem jako s objektem, proto musφte prvky text nahradit normßlnφm textem a znaΦkami. ╚asovou osu naÜt∞stφ nemusφte nijak radikßln∞ m∞nit, Φasy z∙stanou stejnΘ, rovn∞₧ pou₧itφ prvk∙ par a seq (v podob∞ t:par a t:seq) se nem∞nφ, staΦφ pouze nastavit t°φdu time (.time{behavior:url(#default#time2);position:absolute}) a vy°eÜit animace (p°idat atribut "begin" nebo je spolu s prvkem uzav°φt do t°etφho prvku).

Budoucnost SMIL

Nezb²vß ne₧ doufat, ₧e se brzy objevφ podpora SMILu v klasick²ch internetov²ch prohlφ₧eΦφch (jen si zkuste ud∞lat tuto prezentaci v JavaScriptu, jde to, ale "chvilku" to trvß). NaÜe sΘrie o SMILu a vÜech jeho mo₧n²ch podobßch tφmto Φlßnkem oficißln∞ konΦφ. Pakli₧e mßte n∞jakΘ dotazy nebo nßm∞ty k tΘmatu, nevßhejte se vyjßd°it v komentß°φch.

Synchronized Multimedia Integration Language

Jazyk SMIL (Synchronized Multimedia Integration Language) umo₧≥uje tvorbu dynamick²ch multimedißlnφch prezentacφ, kterΘ mohou v²razn∞ p°isp∞t k dobrΘmu dojmu webov²ch strßnek a p°itom nenaruÜuje filozofii slu₧by WWW. Tato sΘrie Φlßnk∙ ji₧ byla uzav°ena, aΦkoli dalÜφ pokraΦovßnφ nelze vylouΦit.

Grimmich, èimon (14. 9. 2004)