SlideShare a Scribd company logo
Dr.SabinBuragawww.purl.org/net/busaco
Dezvoltarea aplicațiilor Web
la nivel de client
suita de tehnologii HTML5
Dr.SabinBuragawww.purl.org/net/busaco
“If you can dream it, you can do it.”
Walt Disney
Dr.SabinBuragawww.purl.org/net/busaco
HTML5
un vocabular (set de elemente + atribute)
folosit pentru marcarea paginilor Web
+
o suită de API-uri facilitând procesarea documentelor
Dr.SabinBuragawww.purl.org/net/busaco
HTML5
permite dezvoltarea standardizată de aplicații Web
pe baza unor API-uri specificate formal
Dr.SabinBuragawww.purl.org/net/busaco
HTML5
permite dezvoltarea standardizată de aplicații Web
pe baza unor API-uri specificate formal
API-urile sunt definite de interfețe
descrise cu limbajul declarativ WebIDL
W3C Recommendation, 2016
www.w3.org/TR/WebIDL/
Dr.SabinBuragawww.purl.org/net/busaco
HTML5 Web API
suita de API-uri JavaScript (ECMAScript) disponibile
– la nivel de client – pentru dezvoltarea de aplicații
arii de interes: grafică și tipografie, multimedia,
interacțiune cu utilizatorul, stocare și fișiere, transfer
în timp-real, componente Web, performanță, securitate
www.w3.org/standards/techs/js
platform.html5.org
developer.mozilla.org/docs/Web/API
Dr.SabinBuragawww.purl.org/net/busaco
HTML5
inițial, o propunere independentă de Consorțiul Web
WHATWG (Web Hypertext Application Technology
Working Group) compus din Apple, Mozilla, Opera
www.whatwg.org
Dr.SabinBuragawww.purl.org/net/busaco
www.whatwg.org/specs/web-apps/current-work/
Dr.SabinBuragawww.purl.org/net/busaco
HTML5
actualmente, standard al Consorțiului Web
W3C Recommendation (2014)
www.w3.org/TR/html5/
varianta cea mai recentă: HTML 5.1
www.w3.org/TR/html/
Dr.SabinBuragawww.purl.org/net/busaco
Ce aduce nou HTML5?
Dr.SabinBuragawww.purl.org/net/busaco
Relaxarea corectitudinii la nivel de sintaxă
HTML – text/html
și/sau
XHTML – application/xhtml+xml
Dr.SabinBuragawww.purl.org/net/busaco
specificarea tipului de document
se poate realiza în mod simplificat:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="ro">
<head>
<title>…</title>
<meta charset="utf-8" />
…
</head>
<body>
…
</body>
</html>
spațiul de nume
rămâne neschimbat
Dr.SabinBuragawww.purl.org/net/busaco
HTML5
detalii privind elementele (marcajele)
și atributele aferente:
www.w3.org/standards/techs/html
a se (re)vedea prezentarea
Sabin Buraga, HTML5 în XXX de minute (2015)
www.slideshare.net/busaco/html5-in-xxx-de-minute
Dr.SabinBuragawww.purl.org/net/busaco
Câteva amănunte
despre noile elemente HTML5?
Dr.SabinBuragawww.purl.org/net/busaco
Noi elemente de structurare (secțiuni)
în stilul POSH – Plain Old Semantic HTML
article, nav, aside, section, header, footer etc.
Dr.SabinBuragawww.purl.org/net/busaco
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="ro" xml:lang="ro">
<head>
<title>Filmul disciplinei | Dezvoltarea aplica&#355;iilor Web la nivel de client</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="author" content="Sabin Buraga – http://www.purl.org/net/busaco" />
<link rel="stylesheet" type="text/css" href="web.css" />
</head>
<body>
<header>
<h1>Dezvoltarea aplica&#355;iilor Web la nivel de client</h1>
<p class="slogan">prezent&#259;rile aferente cursului</p>
</header>
<article>
<p>Filmul desf&#259;&#351;ur&#259;rii materiei este prezentat mai jos.</p>
<nav>
<ul>
<li><a href="#week14" title="…">S&#259;pt&#259;m&acirc;na 14</a></li>
…
<li><a href="#week1" title="…">S&#259;pt&#259;m&acirc;na 1</a></li>
</ul>
</nav>
detalii despre atributul rel la
www.w3.org/TR/html/links.html
Dr.SabinBuragawww.purl.org/net/busaco
<section id="week1">
<h2>&#9635; S&#259;pt&#259;m&acirc;na 1</h2>
<ul>
<li><aside class="menu">reamintire:
<a href="http://profs.info.uaic.ro/~busaco/teach/courses/web/web-film.html"
title="Spre situl disciplinei">Tehnologii Web</a></aside>
<p>…</p>
</li>
</ul>
</section>
</article>
<footer>
<h6>Ultima actualizare: 04 decembrie 2017 /
<a rel="license"
href="http://creativecommons.org/licenses/by-nc-sa/4.0/" title="…">CC</a>
<span itemscope="itemscope" itemtype="http://schema.org/Person">
<a href="http://www.purl.org/net/busaco" title="Spre situl Web al titularului…"
itemprop="url" accesskey="S">
<span itemprop="name">Sabin Buraga</span></a>
</span>
</h6>
</footer>
</body>
</html>
microdate HTML5
folosind vocabularele schema.org
(vezi unul din cursurile anterioare)
Dr.SabinBuragawww.purl.org/net/busaco
Embedded content
„scufundarea” altor tipuri de conținuturi
într-un document HTML
conținut grafic – raster și/sau vectorial
conținut sonor
conținut video
Dr.SabinBuragawww.purl.org/net/busaco
Embedded content
svg
conținut grafic vectorial
specificat prin SVG (Scalable Vector Graphics)
un limbaj descriptiv bazat pe XML
www.w3.org/Graphics/SVG/
developer.mozilla.org/docs/Web/SVG
Dr.SabinBuragawww.purl.org/net/busaco
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>HTML + SVG</title></head>
<body>
<h1>SVG &icirc;ntr-o pagin&#259; Web</h1>
<!-- Elemente și atribute SVG specificate în documentul HTML,
recunoscute pe baza spațiului de nume SVG -->
<svg width="500" height="200" xmlns="http://www.w3.org/2000/svg">
<!-- o zonă rectangulară cu colțuri rotunjite -->
<rect x="50" y="50" rx="7" ry="7" width="450" height="150"
style="fill: #00CCEE; stroke: #3333CC;"/>
<!-- conținut textual -->
<text x="70" y="90" style="stroke: black; fill: gray; font-size: 32pt;">
SVG direct &icirc;n browser...</text>
<!-- un cerc galben -->
<circle cx="400" cy="150" r="33" style="fill: yellow;" />
</svg>
<p>De utilizat un navigator Web oferind suport nativ pentru SVG.</p>
</body>
</html>
Dr.SabinBuragawww.purl.org/net/busaco
vizualizarea în navigatorul Web a ilustrației SVG
via instrumentul JS Bin
Dr.SabinBuragawww.purl.org/net/busaco
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" width="8cm" height="3cm">
<title>Grafică vectorială cu SVG</title>
<defs>
<!-- definim un dégradé (gradient) liniar -->
<linearGradient id="aGradient">
<stop offset="33%" stop-color="#ADA" />
<stop offset="74%" stop-color="#369" />
</linearGradient>
<rect id="aRectangle" width="15px" height="15px" rx="2" ry="2" fill="green" />
<!-- o cale de redare -->
<path id="aPath" d="M15 50 C10 0 90 0 90 40" />
<!-- un filtru cromatic -->
<filter id="visualFilter">
<feColorMatrix in="SourceGraphic" type="matrix"
values="0 0 0 0 0
1 0 1 1 0
0 1 1 0 0
0 0 0 1 0" />
</filter>
</defs>
C. Bulancea & S. Buraga (2004, 2014)
comenzi grafice
(e.g., M=mută, C=cerc)
aplicarea unui filtru
www.w3.org/TR/SVG/filters.html
Dr.SabinBuragawww.purl.org/net/busaco
<!-- o formă rectangulară umplută cu dégradé-ul definit anterior -->
<rect x="1cm" y="1cm" width="6cm" height="1cm" round="1em"
fill="url(#aGradient)" />
<!-- folosim 4 instanțe ale pătratului definit,
plasate la diverse coordonate și având diverse proprietăți grafice -->
<use x="40" y="40" xlink:href="#aRectangle" />
<use x="100" y="80" xlink:href="#aRectangle" filter="url(#visualFilter)" />
<use x="160" y="80" xlink:href="#aRectangle" fill-opacity="0.33" />
<use x="220" y="80" xlink:href="#aRectangle" />
<!-- un text redat conform căii specificate -->
<text fill="red">
<!-- de studiat și http://www.w3.org/TR/SVG/fonts.html -->
<textPath xlink:href="#aPath">&#10084; Web &#x2605;</textPath>
</text>
</svg>
C. Bulancea & S. Buraga (2004, 2014)
Dr.SabinBuragawww.purl.org/net/busaco
redarea conținutului grafic vectorial SVG
Firefox
la nivel de desktop
(Windows 10)
Safari pe platforma
mobilă iOS 11 (iPhone)
Dr.SabinBuragawww.purl.org/net/busaco
Embedded content
svg
specificația curentă: SVG 1.1 2nd Edition (2011)
www.w3.org/TR/SVG/
în lucru: SVG 2.0 (noiembrie 2017) – svgwg.org/svg2-draft/
în contextul dispozitivelor mobile: SVG Tiny 1.2 (2008)
www.w3.org/TR/SVGTiny12/
Dr.SabinBuragawww.purl.org/net/busaco
resurse + exemple demonstrative:
github.com/willianjusten/awesome-svg
suportul cumulat pentru SVG în cadrul navigatoarelor,
inclusiv pe platforme mobile: caniuse.com/#search=svg
Dr.SabinBuragawww.purl.org/net/busaco
Embedded content
svg
biblioteci JavaScript importante:
Raphaël.js – raphaeljs.com
Snap.svg – snapsvg.io
svg.js – svgjs.com
a se considera și Bonsai, Fabric.js, Vivus etc.
www.javascripting.com/search?q=svg
Dr.SabinBuragawww.purl.org/net/busaco
examinarea codului SVG generat de biblioteca Snap.svg
folosind instrumentele de depanare furnizate de browser
Dr.SabinBuragawww.purl.org/net/busaco
Embedded content
math
expresii matematice exprimate via limbajul MathML
un limbaj declarativ bazat pe XML
www.w3.org/Math/
Dr.SabinBuragawww.purl.org/net/busaco
Embedded content
math
specificația curentă: MathML 3.0 (2010)
o listă a instrumentelor software la
www.w3.org/Math/Software/
exemplu notabil: proiectul MathJax – www.mathjax.org
Dr.SabinBuragawww.purl.org/net/busaco
Embedded content
alături de elementele img, iframe, embed și object,
sunt permise audio, video, source
ce pot fi utilizate la includerea de conținut multimedia
Dr.SabinBuragawww.purl.org/net/busaco
Embedded content
elementele audio și video
implementează interfața HTMLMediaElement
Dr.SabinBuragawww.purl.org/net/busaco
interface HTMLMediaElement : HTMLElement {
readonly attribute MediaError error;
attribute DOMString src;
readonly attribute DOMString currentSrc;
attribute DOMString preload;
readonly attribute TimeRanges buffered;
attribute double currentTime;
readonly attribute double duration;
readonly attribute boolean paused;
attribute boolean autoplay;
attribute boolean loop;
attribute boolean controls;
attribute double volume;
attribute boolean muted;
void load ();
void play ();
void pause ();
};
principalele atribute și
metode ale interfeței
HTMLMediaElement
Dr.SabinBuragawww.purl.org/net/busaco
<video id="film" src="/media/tux.ogg" controls autoplay>
Nu există suport pentru elementul video… :-(
</video>
…
<script type="text/javascript">
// preluăm conținutul video
var video = document.getElementById ('film');
</script>
<p>
<input type="button" value="Oprește"
onclick="video.pause ();" />
<input type="button" value="Rulează"
onclick="video.play ();" />
</p>
Dr.SabinBuragawww.purl.org/net/busaco
Embedded content
principalele evenimente ce pot fi tratate
în ceea ce privește conținutul audio/video:
loadstart progress suspend abort error
stalled play pause loadeddata
waiting playing seeking
canplay seeked timeupdate ended
ratechange durationchange volumechange
Dr.SabinBuragawww.purl.org/net/busaco
<source src='fii-absolvent.mp4'
type='video/mp4; codecs="mp4v.20.240, mp4a.40.2"' />
<source src='fii-absolvent.mkv'
type='video/x-matroska; codecs="theora, vorbis"' />
<source src='discursul-lui-tux.oga'
type='audio/ogg; codecs=flac' />
precizarea codec-urilor
necesare redării
Dr.SabinBuragawww.purl.org/net/busaco
<source src='fii-absolvent.mp4'
type='video/mp4; codecs="mp4v.20.240, mp4a.40.2"' />
<source src='fii-absolvent.mkv'
type='video/x-matroska; codecs="theora, vorbis"' />
<source src='discursul-lui-tux.oga'
type='audio/ogg; codecs=flac' />
precizarea codec-urilor
necesare redării
codec-uri uzuale:
H.264 (MPEG4 – comercial, susținut de Apple și Microsoft;
actualmente, orice browser Web modern îl acceptă)
www.h264info.com
Dr.SabinBuragawww.purl.org/net/busaco
<source src='fii-absolvent.mp4'
type='video/mp4; codecs="mp4v.20.240, mp4a.40.2"' />
<source src='fii-absolvent.mkv'
type='video/x-matroska; codecs="theora, vorbis"' />
<source src='discursul-lui-tux.oga'
type='audio/ogg; codecs=flac' />
precizarea codec-urilor
necesare redării
codec-uri uzuale:
OGG (open-source; implementat de Chrome, Firefox
(inclusiv pe Android) și Opera; fără suport în IE/ Edge și
Safari ori pe platforme mobile) – www.xiph.org/ogg/
audio
video
Dr.SabinBuragawww.purl.org/net/busaco
<source src='fii-absolvent.mp4'
type='video/mp4; codecs="mp4v.20.240, mp4a.40.2"' />
<source src='fii-absolvent.mkv'
type='video/x-matroska; codecs="theora, vorbis"' />
<source src='discursul-lui-tux.oga'
type='audio/ogg; codecs=flac' />
precizarea codec-urilor
necesare redării
codec-uri uzuale:
WebM (o inițiativă Google – open source; suport oferit
de Chrome, Firefox și Opera, dar nu și de Safari)
www.webmproject.org
Dr.SabinBuragawww.purl.org/net/busaco
Alte codec-uri:
WebP (Google – format grafic cu/fără pierderi,
oferind suport și pentru animații sau transparență;
implementat doar de Chrome și Opera,
inclusiv pe plaforme mobile)
https://developers.google.com/speed/webp/
Dr.SabinBuragawww.purl.org/net/busaco
Alte codec-uri:
Opus (specificație IETF liberă
asigurând calitatea ridicată a conținutului audio;
implementat de toate navigatoarele Web importante)
http://tools.ietf.org/html/rfc6716
Dr.SabinBuragawww.purl.org/net/busaco
suportul cumulat: caniuse.com/#search=codec
Dr.SabinBuragawww.purl.org/net/busaco
statistici în raportul The State of HTML5 Video (feb. 2017)
developer.jwplayer.com/articles/html5-report/
Dr.SabinBuragawww.purl.org/net/busaco
Embedded content
elementul track permite specificarea de piste (track-uri)
ce pot include subtitrări, descrieri, capitole, meta-date
<!-- prezentare: Bill Parrott, Demystifying CORS (2017) -->
<video src="https://www.infoq.com/presentations/cors">
<track kind="subtitles" src="..." srclang="en" label="English" />
<track kind="captions" src="..." srclang="en"
label="English for the Hard of Hearing" />
<track kind="subtitles" src="..." srclang="ro" label="Românește" />
</video>
Dr.SabinBuragawww.purl.org/net/busaco
Embedded content
elementul track permite specificarea de piste (track-uri)
ce pot include subtitrări, descrieri, capitole, meta-date
conținutul textual se precizează în formatul WebVTT
(ciornă W3C, noiembrie 2017)
www.w3.org/TR/webvtt1/
Dr.SabinBuragawww.purl.org/net/busaco
În ceea ce privește redarea conținutului video,
de interes poate fi și Fullscreen API
specificație în lucru (septembrie 2017),
dar implementată de majoritatea navigatoarelor
fullscreen.spec.whatwg.org
Dr.SabinBuragawww.purl.org/net/busaco
În ceea ce privește redarea conținutului video,
de interes poate fi și Fullscreen API
<video controls id="video">
<source src="video.webm"></source>
<source src="video.mp4"></source>
</video>
…
var elem = document.getElementById("video");
if (elem.requestFullscreen) { // există suport?
elem.requestFullscreen(); // se pot emite evenimentele
} // fullscreenchange sau fullscreenerror
developer.mozilla.org/Web/API/Fullscreen_API
Dr.SabinBuragawww.purl.org/net/busaco
Specificații adiționale:
Media Source Extensions (recomandare W3C, 2016)
scop: crearea dinamică a fluxurilor audio/video
(adaptive bitrate streaming) prin program
www.w3.org/TR/media-source/
algoritmi importanți:
Apple HLS (HTTP Live Streaming)
MPEG DASH (Dynamic Adaptive Streaming over HTTP)
Dr.SabinBuragawww.purl.org/net/busaco
Dr.SabinBuragawww.purl.org/net/busaco
hls.js – implementare JS a HLS
github.com/video-dev/hls.js/
Dr.SabinBuragawww.purl.org/net/busaco
suport aproape inexistent
oferit de browser-ele curente
Dr.SabinBuragawww.purl.org/net/busaco
dash.js – implementare JS de referință (polyfill)
github.com/Dash-Industry-Forum/dash.js
Dr.SabinBuragawww.purl.org/net/busaco
Specificații adiționale:
Encrypted Media Extensions (recomandare W3C, 2017)
scop: criptarea conținutului audio/video și
redarea lui pe baza unei licențe de utilizare
www.w3.org/TR/encrypted-media/
Dr.SabinBuragawww.purl.org/net/busaco
tutorial: developers.google.com/web/fundamentals/media/eme
Dr.SabinBuragawww.purl.org/net/busaco
Embedded content
canvas
suport pentru grafica raster (bitmap)
generată dinamic via JavaScript
Dr.SabinBuragawww.purl.org/net/busaco
Interfața HTMLCanvasElement
scop:
generarea dinamică de conținut grafic
dependent de rezoluția curentă
Dr.SabinBuragawww.purl.org/net/busaco
Interfața HTMLCanvasElement
stipulată de recomandarea W3C privind HTML5
Dr.SabinBuragawww.purl.org/net/busaco
Interfața HTMLCanvasElement
stipulată de recomandarea W3C privind HTML5
context de redare:
conținut grafic 2D transparent de tip raster
(W3C Recommendation, 2015)
www.w3.org/TR/2dcontext/
Dr.SabinBuragawww.purl.org/net/busaco
typedef (CanvasRenderingContext2D or
WebGLRenderingContext) RenderingContext;
interface HTMLCanvasElement : HTMLElement {
// specifică zona rectangulară de redare a conținutului grafic
attribute unsigned long width;
attribute unsigned long height;
// metodă care oferă contextul redării conținutului
RenderingContext? getContext (DOMString contextId, any... args);
// metodă ce întoarce un URL folosind schema data:
// pentru accesul la conținutul generat
DOMString toDataURL
(optional DOMString type, any... args);
// metodă oferind manieră de serializare (e.g., salvare) a imaginii
void toBlob (FileCallback? _callback,
optional DOMString type, any... arguments);
};
Dr.SabinBuragawww.purl.org/net/busaco
Interfața HTMLCanvasElement
este asociată elementului HTML5 canvas
contextul 2D de redare a conținutului generat dinamic
de script-urile operând asupra obiectului canvas este
specificat formal de interfața CanvasRenderingContext2D
developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D
Dr.SabinBuragawww.purl.org/net/busaco
Elementul canvas – interfața CanvasRenderingContext2D
transformări geometrice de bază:
scale()
rotate()
translate()
transform()
setTransform()
Dr.SabinBuragawww.purl.org/net/busaco
Elementul canvas – interfața CanvasRenderingContext2D
generarea de căi grafice (paths):
lineTo() moveTo() rect() arc() fill() stroke() clip()
arcTo() quadraticCurveTo() bezierCurveTo()
beginPath() closePath()
isPointInPath()
Dr.SabinBuragawww.purl.org/net/busaco
Elementul canvas – interfața CanvasRenderingContext2D
manipularea zonelor rectangulare:
strokeRect()
fillRect()
clearRect()
Dr.SabinBuragawww.purl.org/net/busaco
Elementul canvas – interfața CanvasRenderingContext2D
crearea dégradé-urilor:
createLinearGradient()
createRadialGradient()
createPattern()
plus addColorStop() – oferită de interfața CanvasGradient
vezi și CSS3
Dr.SabinBuragawww.purl.org/net/busaco
Elementul canvas – interfața CanvasRenderingContext2D
specificarea de conținuturi textuale:
font
textAlign
fillText()
strokeText()
measureText()
Dr.SabinBuragawww.purl.org/net/busaco
Elementul canvas – interfața CanvasRenderingContext2D
suport pentru redarea umbrelor:
shadowOffsetX
shadowOffsetY
shadowColor
shadowBlur
Dr.SabinBuragawww.purl.org/net/busaco
Elementul canvas – interfața CanvasRenderingContext2D
manipularea conținutului grafic:
createImageData()
getImageData()
putImageData()
vezi interfața ImageData
developer.mozilla.org/docs/Web/API/ImageData
Dr.SabinBuragawww.purl.org/net/busaco
Elementul canvas – interfața CanvasRenderingContext2D
operații cu imagini:
drawImage()
save()
restore()
globalAlpha
globalCompositeOperation
Dr.SabinBuragawww.purl.org/net/busaco
<!DOCTYPE html>
studiu de caz: CanvasDemo
<canvas id="canvas" width="680" height="480"></canvas>
…
function deseneazaDiscuri() {
var context = document.getElementById('canvas').getContext('2d');
context.font = "3em serif"; // stabilirea parametrilor corpului de literă
context.strokeText("minune", 7, 33);
context.translate(74, 74); // ...plus translare
for (let i = 1; i < 5; i++) { // generarea 'inelelor' de discuri
context.save(); // salvarea contextului de redare
// stabilirea via CSS a culorii de umplere a discului curent + ajustarea aleatorie a transp.
context.fillStyle = 'rgba(33, ' + (74 * i) + ',' + (255 - 74 * i) + ',' + Math.random() + ')';
for (let j = 0; j < i * 6; j++) { // desenarea discurilor
context.rotate(Math.PI * 2 / (i * 6));
context.beginPath();
context.arc(0, i * 12.5, 5, 0, Math.PI * 2, true);
context.fill();
}
context.restore(); // restaurarea contextului de redare
}
}
// tratarea evenimentului click
document.body.addEventListener ("click", deseneazaDiscuri);
corola de minuni
Dr.SabinBuragawww.purl.org/net/busaco
un posibil rezultat al execuției programului
codul complet la jsfiddle.net/busaco/vwhz4a5c/
Sabin Buraga < busaco@infoiasi.ro >
de studiat și
developer.mozilla.org/docs/Web/API/Canvas_API
perfectionkills.com/exploring-canvas-drawing-techniques/
o suită de tutoriale:
www.html5canvastutorials.com
Dr.SabinBuragawww.purl.org/net/busaco
exemple de biblioteci:
Fabric Flotr2 Kinetic Paper
libCanvas Processing.js Rekapi
github.com/raphamorim/awesome-canvas
Dr.SabinBuragawww.purl.org/net/busaco
Interfața HTMLCanvasElement
alternativă de redare:
conținut grafic 3D pe baza WebGL
implementare JavaScript a standardului
OpenGL ES 2.0 (Embedded Accelerated 3D Graphics)
www.khronos.org/opengles/
suport: Apple, AMD, Fujitsu, Google, Intel, NVIDIA, Samsung, Sony,…
Dr.SabinBuragawww.purl.org/net/busaco
Interfața HTMLCanvasElement
alternativă de redare:
conținut grafic 3D pe baza WebGL
specificație furnizată de Khronos Group
WebGL 1.0 (curent), WebGL 2.0 (în lucru)
www.khronos.org/webgl/wiki/
developer.mozilla.org/docs/Web/WebGL
Dr.SabinBuragawww.purl.org/net/busaco
statistici privind suportul pentru WebGL
la nivel de desktop, platforme mobile, console de jocuri
webglstats.com
Dr.SabinBuragawww.purl.org/net/busaco
medii Web de dezvoltare:
WebGL Playground – webglplayground.net
WebGLStudio.js – github.com/jagenjo/webglstudio.js
Dr.SabinBuragawww.purl.org/net/busaco
<script id="shader-vs" type="x-shader/x-vertex">
// codul-sursă implementând un vertex shader (OpenGL)
</script>
<script id="shader-fs" type="x-shader/x-fragment">
// codul-sursă al unui fragment shader (OpenGL)
</script>
<script type="text/javascript">
// cod JavaScript recurgând la WebGL
</script>
…
<body onload="webGLStart ();">
<canvas id="spatiu3D" width="1024" height="768"></canvas>
</body>
tutorial WebGL: learningwebgl.com/blog/?page_id=1217
Dr.SabinBuragawww.purl.org/net/busaco
Shader Editor inclus în Firefox
folosit la inspectarea shader-elor
editate cu instrumentul online Shdr
shdr.bkcore.com
Dr.SabinBuragawww.purl.org/net/busaco
Awesome WebGL – github.com/sjfricke/awesome-webgl
biblioteci / 3D engines: BabylonJS, c3DL, CopperLicht,
CubicVR, OSG, PhiloGL, SceneJS, Three.js,…
www.babylonjs-playground.com
Dr.SabinBuragawww.purl.org/net/busaco
Folosind WebGL se oferă premisele dezvoltării de aplicații
vizând realitatea virtuală (VR – Virtual Reality) și
realitatea îmbogățită (AR – Augmented Reality)
reality-virtuality continuum (Milgram & Kishino, 1994)
realitate mixtă (mixed reality)
www.slideshare.net/busaco/from-virtual-to-augmented-reality
Dr.SabinBuragawww.purl.org/net/busaco
Realitate virtuală cu WebVR
specificație deschisă – în lucru la W3C (octombrie 2017) –
permițând crearea de lumi virtuale pe desktop/mobil
în browser recurgând la senzori/dispozitive de tip headset
Dr.SabinBuragawww.purl.org/net/busaco
Realitate virtuală cu WebVR
framework-uri/platforme de dezvoltare:
A-Frame – aframe.io
PlayCanvas – playcanvas.com
Sketchfab – sketchfab.com
Vizor – vizor.io
resurse pentru programatori:
webvr.info/developers/
developer.mozilla.org/Web/API/WebVR_API
Dr.SabinBuragawww.purl.org/net/busaco
Realitate virtuală cu WebVR
suportul curent oferit de navigatoarele Web: webvr.rocks
Dr.SabinBuragawww.purl.org/net/busaco
Formulare HTML5
formularele Web pot include noi tipuri de câmpuri
(search tel url email date time number range color),
valorile putând fi eventual auto-completate
și/sau validate de browser
www.w3.org/TR/html5/forms.html
diveintohtml5.info/forms.html
Dr.SabinBuragawww.purl.org/net/busaco
<label>Adrese suplimentare:
<input type="email" multiple
list="adrese" name="cc" />
</label>
<datalist id="adrese">
<option value="tux@pinguin.info">tux@pinguin.info</option>
<option value="tuxy.pingu@pol.org">tuxy.pingu@pol.org</option>
<option value="tp@alt.undeva.org">tp@alt.undeva.org</option>
</datalist>
<input type="date" max="2001-12-31" name="zi-nastere" />
<input type="range" min="1" max="7" step="2" name="premii" />
<input type="color" name="culoare" />
<input type="search" pattern="[A-Za-z]+" placeholder="Caută cadouri..." />
nu există încă suport complet
pentru toate tipurile de controale de interacțiune
atributul multiple poate fi folosit
și la upload-ul mai multor fișiere
Dr.SabinBuragawww.purl.org/net/busaco
formulare HTML5 – testarea facilităților:
miketaylr.com/code/input-type-attr.html
Dr.SabinBuragawww.purl.org/net/busaco
Atribute definite de programator
(custom HTML5 attributes)
într-un document HTML5 pot fi incluse atribute proprii
prefixate cu data-
pot stoca valori private
disponibile la nivel de pagină/aplicație Web
developer.mozilla.org/Learn/HTML/Howto/Use_data_attributes
Dr.SabinBuragawww.purl.org/net/busaco
<div id="utilizator" data-id="1234" data-user="tux" data-date-of-birth>
Tuxy Pinguinescu</div>
var elem = document.querySelector ('#utilizator'); // obținem datele
// elem.id == 'utilizator'
// elem.dataset.id === '1234'
// elem.dataset.dateOfBirth === '' (data de naștere n-a fost precizată)
elem.dataset.dateOfBirth = '1994-12-17'; // stabilim când s-a născut
el.dataset.someDataAttr = 'mydata';
// 'someDataAttr' in el.dataset === true
folosirea consolei navigatorului Web pentru
accesarea și modificarea atributelor data-
via obiectul dataset
Dr.SabinBuragawww.purl.org/net/busaco
testarea suportului pentru HTML5: html5test.com
Dr.SabinBuragawww.purl.org/net/busaco
episodul viitor:
API-uri JavaScript în contextul HTML5

More Related Content

PDF
Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...
PDF
Sabin Buraga: Dezvoltator Web?! (2019)
PDF
Design (Web) responsiv
PDF
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
PDF
Dezvoltator Web?! (varianta 2015)
PDF
Web 2016 (03/13) Programare Web – Servere de aplicații. Arhitectura aplicații...
PDF
Sabin Buraga – Dezvoltator Web (...în 2017)
PDF
WADe 2014—2015 (03/12): Arhitectura aplicaţiilor Web orientate spre servicii
Dezvoltarea aplicațiilor Web (3/12): Arhitectura aplicaţiilor Web orientate s...
Sabin Buraga: Dezvoltator Web?! (2019)
Design (Web) responsiv
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Dezvoltator Web?! (varianta 2015)
Web 2016 (03/13) Programare Web – Servere de aplicații. Arhitectura aplicații...
Sabin Buraga – Dezvoltator Web (...în 2017)
WADe 2014—2015 (03/12): Arhitectura aplicaţiilor Web orientate spre servicii

What's hot (20)

PDF
Dezvoltator Web?! – ...în 2016
PDF
Cu codul în "nori"
PDF
Ce înseamnă să fii dezvoltator Web
PDF
Ce înseamnă a fi dezvoltator Web (varianta 2014)
PDF
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
PDF
Dezvoltarea aplicatiilor orientate spre servicii Web. De la REST la mash-up-u...
PDF
Web 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturale
PDF
Servicii Web prin REST
PDF
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
PDF
Căutarea resurselor Web
PDF
Web 2016 (02/13) Programare Web – Protocolul HTTP. Cookie-uri. Sesiuni Web
PDF
Suita de tehnologii HTML5
PDF
25 de ani de Web
PDF
Web 2020 01/12: World Wide Web – aspecte arhitecturale
PDF
Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)
PDF
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
PDF
HTML5 în XXX de minute
PDF
STAW 01/12: Arhitectura aplicaţiilor Web
PDF
Tendinte in proiectarea si dezvoltarea aplicatiilor Web
PDF
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
Dezvoltator Web?! – ...în 2016
Cu codul în "nori"
Ce înseamnă să fii dezvoltator Web
Ce înseamnă a fi dezvoltator Web (varianta 2014)
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Dezvoltarea aplicatiilor orientate spre servicii Web. De la REST la mash-up-u...
Web 2016 (01/13) Spațiul World Wide Web – aspecte arhitecturale
Servicii Web prin REST
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Căutarea resurselor Web
Web 2016 (02/13) Programare Web – Protocolul HTTP. Cookie-uri. Sesiuni Web
Suita de tehnologii HTML5
25 de ani de Web
Web 2020 01/12: World Wide Web – aspecte arhitecturale
Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
HTML5 în XXX de minute
STAW 01/12: Arhitectura aplicaţiilor Web
Tendinte in proiectarea si dezvoltarea aplicatiilor Web
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
Ad

Similar to CLIW 2017-2018 (9/12) Programare Web. Suita de tehnologii HTML5 (20)

PDF
STAW 08/12: Programare Web. Suita de tehnologii HTML5
PDF
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
PDF
CLIW 2014—2015 (10/12): Programare Web. Suita de tehnologii HTML5
PDF
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #11): Programare Web....
PDF
WADe 2014—2015 (supliment): Modelarea datelor în HTML: microformate & scheme ...
PDF
WADe 2017-2018 Tutorial (2/3): Data Modeling in HTML: Schema.org HTML5 Microdata
PDF
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
PDF
WADe 2017-2018 (2/12) Service-based Web Application Development. REST
PDF
Aplicații Firefox OS cu HTML5
PDF
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
PDF
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
PDF
Web 2016 (10/13) Servicii Web. De la arhitecturi orientate spre servicii (SOA...
PDF
CLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScript
PDF
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
PDF
Dezvoltarea aplicațiilor Web (supliment): Modelarea datelor în HTML: microfor...
PDF
HTML5? HTML5!
PDF
Dezvoltarea aplicațiilor Web (2/12): Dezvoltarea de servicii Web în stilul REST
PDF
WADe 2014—2015 (02/12): Dezvoltarea de servicii Web în stilul REST
PDF
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
PDF
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5
CLIW 2015-2016 (10/13) Programare Web. Suita de tehnologii HTML5
CLIW 2014—2015 (10/12): Programare Web. Suita de tehnologii HTML5
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #11): Programare Web....
WADe 2014—2015 (supliment): Modelarea datelor în HTML: microformate & scheme ...
WADe 2017-2018 Tutorial (2/3): Data Modeling in HTML: Schema.org HTML5 Microdata
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
WADe 2017-2018 (2/12) Service-based Web Application Development. REST
Aplicații Firefox OS cu HTML5
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
Web 2016 (10/13) Servicii Web. De la arhitecturi orientate spre servicii (SOA...
CLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2015-2016 (9/13) Ingineria dezvoltării aplicațiilor JavaScript
Dezvoltarea aplicațiilor Web (supliment): Modelarea datelor în HTML: microfor...
HTML5? HTML5!
Dezvoltarea aplicațiilor Web (2/12): Dezvoltarea de servicii Web în stilul REST
WADe 2014—2015 (02/12): Dezvoltarea de servicii Web în stilul REST
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
Ad

More from Sabin Buraga (19)

PDF
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
PDF
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
PDF
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
PDF
Web 2020 09/12: Servicii Web. Paradigma REST
PDF
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
PDF
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
PDF
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
PDF
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
PDF
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
PDF
STAW 04/12: Programare Web: Node.js
PDF
STAW 05/12: Arhitectura navigatorului Web
PDF
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
PDF
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
PDF
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
PDF
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
PDF
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
PDF
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
PDF
HCI 2018 (5/10) Information Architecture. From Design Patterns to Flow
PDF
HCI 2018 (6/10) Design Patterns for Social (Web/mobile) Interactions
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 09/12: Servicii Web. Paradigma REST
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 04/12: Programare Web: Node.js
STAW 05/12: Arhitectura navigatorului Web
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (5/10) Information Architecture. From Design Patterns to Flow
HCI 2018 (6/10) Design Patterns for Social (Web/mobile) Interactions

CLIW 2017-2018 (9/12) Programare Web. Suita de tehnologii HTML5