Documentos de Académico
Documentos de Profesional
Documentos de Cultura
HTML5 Canvas
HTML5 Canvas
Canvas
Un lienzo en la
Web
Miguel Angel Cumpa Ascua
Objetivo
3D, Graphics
& Effects
Objetivo de la sesin
stroeRect4&#y#widt3#3eig3t5 E Dibu:a un
contorno rectangular
function draw45A
var canvas < document2getElement>y!d4?tutorial?5@
if 4canvas2getConte&t5A
var ct& < canvas2getContext4?9d?5@
ct&2fillRect491#91#788#7885@
ct&2clearRect4H1#H1#I8#I85@
ct&2stroeRect418#18#18#185@
C
C
(o)mas *sicas
Dibujar lineas
ct&2beginPat345@
ct&2move*o4N1#185@
ct&2line*o4788#N15@
ct&2line*o4788#915@
ct&2fill45@
(o)mas *sicas
!jemplo 2 ,rc
ct&2beginPat345@
ct&2arc4N1#N1#18#8#+at32P!L9#true5@
ct&2move*o4778#N15@
ct&2arc4N1#N1#O1#8#+at32P!#false5@
ct&2move*o4I1#I15@
ct&2arc4I8#I1#1#8#+at32P!L9#true5@
ct&2move*o4P1#I15@
ct&2arc4P8#I1#1#8#+at32P!L9#true5@
ct&2stroQe45@
(o)mas *sicas
!jemplo 2 3uadraticCurve)o
ct&2beginPat345@
ct&2move*o4N1#915@
ct&2quadraticCurve*o491#91#91#I9215@
ct&2quadraticCurve*o491#788#18#7885@
ct&2quadraticCurve*o418#798#O8#7915@
ct&2quadraticCurve*o4I8#798#I1#7885@
ct&2quadraticCurve*o4791#788#791#I9215@
ct&2quadraticCurve*o4791#91#N1#915@
ct&2stroQe45@
(o)mas *sicas
!jemplo 2 "e/ierCurve)o
ct&2beginPat345@
ct&2move*o4N1#H85@
ct&2bezierCurve*o4N1#ON#N8#91#18#915@
ct&2bezierCurve*o498#91#98#I921#98#I9215@
ct&2bezierCurve*o498#K8#H8#789#N1#7985@
ct&2bezierCurve*o4778#789#7O8#K8#7O8#I9215@
ct&2bezierCurve*o47O8#I921#7O8#91#788#915@
ct&2bezierCurve*o4K1#91#N1#ON#N1#H85@
ct&2fill45@
Imgenes
3D, Graphics
& Effects
Imgenes
document.getElementsByTagName:
accedemos a las imgenes mediante el tag
document6get!lement"y4d: si conocemos el
!D de la imagen
Imgenes
5sando otros elementos Canvas
function draw45 A
var ct& <
document2getElement>y!d4?canvas?52getConte&t4?9d?5@
var img < new !mage45@
img2onload < function45A
ct&2draw!mage4img#8#85@
ct&2beginPat345@
ct&2move*o4O8#PI5@
ct&2line*o4N8#II5@
ct&2line*o478O#NI5@
ct&2line*o47N8#715@
ct&2stroQe45@
C
img2src < ?images0bacQdrop2png?@
C
Imgenes
!scalando
function draw45 A
var ct& <
document2getElement>y!d4?canvas?52getConte&t4?9d?5@
var img < new !mage45@
img2onload < function45A
for 4var i<8@i.H@iUU5A
for 4var :<8@:.O@:UU5A
ct&2draw!mage4img#:L18#iLOK#18#OK5@
C
C
C
img2src < ?images0r3ino2:pg?@
C
Imgenes
Rebanando
function draw45 A
var canvas < document2getElement>y!d4?canvas?5@
var ct& < canvas2getConte&t4?9d?5@
00 Draw slice
ct&2draw!mage4document2getElement>y!d4?source?5#
OO#N7#78H#79H#97#98#KN#78H5@
00 Draw frame
ct&2draw!mage4document2getElement>y!d4?frame?5#8#85@
C
Colo)
3D, Graphics
& Effects
Colo)
00 colorE naran:a
ct&2fill'tyle < =orange=@
ct&2fill'tyle < =W"";188=@
ct&2fill'tyle < =rgb4911#7I1#85=@
ct&2fill'tyle < =rgba4911#7I1#8#75=@
Colo)
function draw45 A
var ct& < document2getElement>y!d4?canvas?5
2getConte&t4?9d?5@
for 4var i<8@i.I@iUU5A
for 4var :<8@:.I@:UU5A
ct&2fill'tyle < ?rgb4? U +at32floor4911JH921Li5 U ?#? U
+at32floor4911JH921L:5 U ?#85?@
ct&2fillRect4:L91#iL91#91#915@
C
C
C
Colo)
!jemplo 2 stroeStyle
function draw45 A
var ct& < document
2getElement>y!d4?canvas?52getConte&t4?9d?5@
for 4var i<8@i.I@iUU5A
for 4var :<8@:.I@:UU5A
ct&2stroQe'tyle < ?rgb48#? U +at32floor4911JH921Li5
U ?#? U+at32floor4911JH921L:5 U ?5?@
ct&2beginPat345@
ct&2arc47921U:L91#7921UiL91#78#8#+at32P!L9#true5@
ct&2stroQe45@
C
C
C
Colo)
)ransparencia
ctx6fillStyle : ;rgba%1<<*0=<*>*0.5&;?
Colo)
!jemplo 2 global,lp$a
function draw45 A
var ct& < document2getElement>y!d4?canvas?52getConte&t4?9d?5@
00 dibu:o el fondo
ct&2fill'tyle < ?W"D8?@
ct&2fillRect48#8#N1#N15@
ct&2fill'tyle < ?WIC8?@
ct&2fillRect4N1#8#N1#N15@
ct&2fill'tyle < ?W8P"5?@
ct&2fillRect48#N1#N1#N15@
ct&2fill'tyle < ?W"O8?@
ct&2fillRect4N1#N1#718#7185@
ct&2fill'tyle < ?W"""?@
00 fi:o el valor de la transparencia
ct&2global;lp3a < 829@
00 dibu:o circulos semitransparentes
for 4i<8@i.N@iUU5A
ct&2beginPat345@
ct&2arc4N1#N1#78U78Li#8#+at32P!L9#true5@
ct&2fill45@
C
C
Colo)
!jemplo 2 fillRect
function draw45 A
var ct& < document2getElement>y!d4?canvas?52getConte&t4?9d?5@
00 Draw bacQground
ct&2fill'tyle < ?rgb4911#997#85?@
ct&2fillRect48#8#718#ON215@
ct&2fill'tyle < ?rgb4789#98H#85?@
ct&2fillRect48#ON21#718#ON215@
ct&2fill'tyle < ?rgb48#71O#9115?@
ct&2fillRect48#N1#718#ON215@
ct&2fill'tyle < ?rgb4911#17#85?@
ct&2fillRect48#77921#718#ON215@
00 Draw semi transparent rectangles
for 4var i<8@i.78@iUU5A
ct&2fill'tyle < ?rgba4911#911#911#?U4iU75078U?5?@
for 4var :<8@:.H@:UU5A
ct&2fillRect41UiL7H#1U:LON21#7H#9N215
C
C
C
Colo)
!stilos de lineas
function draw45 A
var ct&<
document2getElement>y!d4?canvas?52getConte&t4?9d?5@
for 4var i < 8@ i . 78@ iUU5A
ct&2lineYidt3 < 7Ui@
ct&2beginPat345@
ct&2move*o41UiL7H#15@
ct&2line*o41UiL7H#7H85@
ct&2stroQe45@
C
C
Colo)
lineCap
function draw45 A
var ct& <
document2getElement>y!d4?canvas?52getConte&t4?9d?5@
var line%oin < Z?round?#?bevel?#?miter?[@
ct&2lineYidt3 < 78@
for 4var i<8@i.line%oin2lengt3@iUU5A
ct&2line%oin < line%oinZi[@
ct&2beginPat345@
ct&2move*o4J1#1UiLH85@
ct&2line*o4O1#H1UiLH85@
ct&2line*o4N1#1UiLH85@
ct&2line*o4771#H1UiLH85@
ct&2line*o4711#1UiLH85@
ct&2stroQe45@
C
C
Colo)
(iter+imit
function draw45 A
var ct& < document2getElement>y!d4?canvas?52getConte&t4?9d?5@
00 crea el degradado
var lingrad < ct&2create,inearradient48#8#8#7185@
lingrad2addColor'top48# ?W88;>E>?5@
lingrad2addColor'top4821# ?Wfff?5@
lingrad2addColor'top4821# ?W9IC888?5@
lingrad2addColor'top47# ?Wfff?5@
var lingrad9 < ct&2create,inearradient48#18#8#P15@
lingrad92addColor'top4821# ?W888?5@
lingrad92addColor'top47# ?rgba48#8#8#85?5@
00 asigna el degradado al stroQe'tyle y fill'tyle
ct&2fill'tyle < lingrad@
ct&2stroQe'tyle < lingrad9@
00 draw s3apes
ct&2fillRect478#78#7O8#7O85@
ct&2stroQeRect418#18#18#185@
C
Colo)
!jemplo 2 createRadialAradient
function draw45 A
var ct& < document2getElement>y!d4?canvas?52getConte&t4?9d?5@
00 crea el degradado
var radgrad < ct&2createRadialradient4H1#H1#78#19#18#O85@
radgrad2addColor'top48# ?W;NDO8C?5@
radgrad2addColor'top482P# ?W87P"I9?5@
radgrad2addColor'top47# ?rgba47#71P#PK#85?5@
var radgrad9 < ct&2createRadialradient4781#781#98#779#798#185@
radgrad92addColor'top48# ?W""1"PK?5@
radgrad92addColor'top482N1# ?W""87KK?5@
radgrad92addColor'top47# ?rgba4911#7#7OI#85?5@
var radgradO < ct&2createRadialradient4P1#71#71#789#98#H85@
Colo)
!jemplo 2 createRadialAradient
radgradO2addColor'top48# ?W88CP""?5@
radgradO2addColor'top482K# ?W88>1E9?5@
radgradO2addColor'top47# ?rgba48#987#911#85?5@
var radgradH < ct&2createRadialradient48#718#18#8#7H8#P85@
radgradH2addColor'top48# ?W"H"987?5@
radgradH2addColor'top482K# ?WEHCN88?5@
radgradH2addColor'top47# ?rgba499K#7PP#8#85?5@
00 dibu:a formas
ct&2fill'tyle < radgradH@
ct&2fillRect48#8#718#7185@
ct&2fill'tyle < radgradO@
ct&2fillRect48#8#718#7185@
ct&2fill'tyle < radgrad9@
ct&2fillRect48#8#718#7185@
ct&2fill'tyle < radgrad@
ct&2fillRect48#8#718#7185@
C
Colo)
#atrones
Create#attern%image*type&
function draw45 A
var ct& < document2getElement>y!d4?canvas?52getConte&t4?9d?5@
00 crea un ob:eto image para usarlo en el pattern
var img < new !mage45@
img2src < ?images0wallpaper2png?@
img2onload < function45A
00 crea un pattern
var ptrn < ct&2createPattern4img#?repeat?5@
ct&2fill'tyle < ptrn@
ct&2fillRect48#8#718#7185@
C
C
Colo)
Sombras
function draw45 A
var ct& <
document2getElement>y!d4?canvas?52getConte&t4?9d?5@
ct&2s3adowFffset- < 9@
ct&2s3adowFffsetV < 9@
ct&2s3adow>lur < 9@
ct&2s3adowColor < =rgba48# 8# 8# 8215=@
ct&2font < =98p& *imes $ew Roman=@
ct&2fill'tyle < =>lacQ=@
ct&2fill*e&t4='ample 'tring=# 1# O85@
C
T)ans+o),
maciones
3D, Graphics
& Effects
T)ans+o)maciones
save%& y restore%&
function draw45 A
var ct& < document2getElement>y!d4?canvas?52getConte&t4?9d?5@
ct&2fillRect48#8#718#7185@ 00 dibu:a un rectngulo
ct&2save45@ 00 graba el estado por defecto
ct&2fill'tyle < ?W8P"? 00 3acemos cambios
ct&2fillRect471#71#798#7985@ 00 dibu:amos un nuevo rectngulo
ct&2save45@ 00 guardamos el actual estado
ct&2fill'tyle < ?W"""? 00 3acemos cambios
ct&2global;lp3a < 821@
ct&2fillRect4O8#O8#P8#P85@ 00 dibu:amos un rectngulo
ct&2restore45@ 00 restauramos al estado anterior
ct&2fillRect4H1#H1#I8#I85@00 dibu:amos un rectngulo con el estado anterior
ct&2restore45@ 00 restauramos el estado original
ct&2fillRect4I8#I8#O8#O85@ 00 dibu:amos un rectngulo con el estado original
C
T)ans+o)maciones
translate%x* y&
function draw45 A
var ct& < document2getElement>y!d4?canvas?5
2getConte&t4?9d?5@
ct&2fillRect48#8#O88#O885@
for 4var i<8@i.O@iUU5 A
for 4var :<8@:.O@:UU5 A
ct&2save45@
ct&2stroQe'tyle < =WPC""88=@
ct&2translate418U:L788#18UiL7885@
draw'pirograp34ctbL4:U9504:U75#JKL4iUO504iU75#785@
ct&2restore45@
C
C
C
T)ans+o)maciones
function draw'pirograp34ct&#R#r#F5A
var &7 < RJF@
var y7 < 8@
var i < 7@
ct&2beginPat345@
ct&2move*o4&7#y75@
do A
if 4i/988885 breaQ@
var &9 < 4RUr5L+at32cos4iL+at32P!0N95 \
4rUF5L+at32cos444RUr50r5L4iL+at32P!0N955
var y9 < 4RUr5L+at32sin4iL+at32P!0N95 \
4rUF5L+at32sin444RUr50r5L4iL+at32P!0N955
ct&2line*o4&9#y95@
&7 < &9@
y7 < y9@
iUU@
C w3ile 4&9 ]< RJF ^^ y9 ]< 8 5@
ct&2stroQe45@
C
T)ans+o)maciones
rotate%angle&
function draw45 A
var ct& < document2getElement>y!d4?canvas?52getConte&t4?9d?5@
ct&2translate4N1#N15@
for 4var i<7@i.I@iUU5A 00 ,oop t3roug3 rings 4from inside to out5
ct&2save45@
ct&2fill'tyle < ?rgb4?U417Li5U?#?U4911J17Li5U?#9115?@
for 4var :<8@:.iLI@:UU5A 00 draw individual dots
ct&2rotate4+at32P!L904iLI55@
ct&2beginPat345@
ct&2arc48#iL7921#1#8#+at32P!L9#true5@
ct&2fill45@
C
ct&2restore45@
C
C
T)ans+o)maciones
scale%x* y&
2
Com-osicin
3D, Graphics
& Effects
Com-osicin
globalComposite7peration : type
sourceJover 4default5
DestinationJover
sourceJin
Com-osicin
type:
destinationJin
sourceJout
destinationJout
Com-osicin
type:
'ourceJatop
DestinationJatop
lig3ter
Com-osicin
type:
-or
Copy
2
Com-osicin
Clip%&
2
Animaciones
*sicas
3D, Graphics
& Effects
Animaciones *sicas
#asos bsicos:
72>orrar el canvas
92uardar el estado del canvas
O2Dibu:ar formas animadas
H2Restaurar el estado del canvas
Animaciones *sicas
Controlando una animaciFn
set4nterval%animateS$ape*milisegundos&?
set)imeout%animateS$ape*milisegundos&?
2
.)eg/ntas
3D, Graphics
& Effects
Canvas
Un lienzo en la
Web
Miguel Angel Cumpa Ascua
miguelmiseck@mozilla.pe
/mozillaperu