Tipos de programación (script):
script
<script src="filename"></script>
<script src="example.js"></script>
script
debe ser puesta en el head
de la página HTML.js
separado body
o head
del fichero HTML, aunque
no se recomienda.
alert
alert("message");
alert("IE6 detected. Suck-mode enabled.");
console.log
console.log("message");
console.log("The answer is:" + 42);
alert
para depurar programas JS.
// comentarios de linea
/* comentarios multlinea */
<!-- comment -->
/* comment */
// comment
# comment
let name = expression;
let age = 32; let weight = 127.4; let clientName = "Connie Client";
let
.
Antes se usaba la palabra reservada var
.Number
, Boolean
, String
,
Array
, Object
, Function
,
Null
, Undefined
typeof
Desde ECMA6, JavaScript tiene una palabra clave especial (const
) para declarar valores "constantes".
Se debe usar en lugar de la palabra clave let
para variables que no se van a modificar.
También se debe respetar la convención de usar letras mayúsculas para los nombres const
en JS.
let month = 12; month = 1; // no error const COOLEST_CLASS = "CSE154"; COOLEST_CLASS = "clazz"; // error por intentar reasignar una const
number
let enrollment = 99; let medianGrade = 2.8; let credits = 5 + 4 + (2 * 3);
int
vs. double
). Todos los números en JS
son números reales (float)+ - * / % ++ -- = += -= *= /= %=
"2" * 3
is 6
String
let s = "Connie Client"; let fName = s.substring(0, s.indexOf(" ")); // "Connie" let len = s.length; // 13 let s2 = 'Melvin Merchant'; // can use "" or ' '
charAt
,
charCodeAt
,
fromCharCode
,
indexOf
,
lastIndexOf
,
replace
,
split
,
substring
,
toLowerCase
,
toUpperCase
charAt
devuelve una letra String
(no hay tipo char
)length
devuelve la longitud del String. +
: 1
+ 1 es 2
, pero
"1"
+ 1 es "11"
String
\' \" \& \n \t \\
String
s:
let count = 10; let s1 = "" + count; // "10" let s2 = count + " bananas, ah ah ah!"; // "10 bananas, ah ah ah!" let n1 = parseInt("42 is the answer"); // 42 let n2 = parseFloat("booyah"); // NaN
String
, usar [index] o charAt
:
let firstLetter = s[0]; let firstLetter = s.charAt(0); let lastLetter = s.charAt(s.length - 1);
split
and
join
let s = "the quick brown fox"; let a = s.split(" "); // ["the", "quick", "brown", "fox"] a.reverse(); // ["fox", "brown", "quick", "the"] s = a.join("!"); // "fox!brown!quick!the"
split
separa una cadena y forma un array usando un delimitador
/
:
let a = s.split(/[ \t]+/);
join
une los elementos de un array en una sola cadena, colocando un delimitador entre ellalet today = new Date(); // today let midterm = new Date(2007, 4, 4); // May 4, 2007
getYear
retorna el año con 2-dígitos; usar getFullYear
en su lugar getDay
retorna el día de la semana de 0 (Dom) a 6 (Sáb)getDate
retorna el día del mes de 1 a (# de días del mes)Date
almacena los meses de 0-11 (no desde 1-12)eval
eval("JavaScript code");
eval("let x = 7; x++; alert(x / 2);"); // alerts 4
eval
trata un String como código JavaScript y ejecuta ese códigolet iLike190M = true; let ieIsGood = "IE6" > 0; // false if ("web dev is great") { /* true */ } if (0) { /* false */ } if (1) { /* true */ }
Boolean
0
, 0.0
,
NaN
, ""
, null
, y
undefined
Boolean
explícitamente:
let boolValue = Boolean(otherValue);
let rand1to10 = Math.floor(Math.random() * 10 + 1); let three = Math.floor(Math.PI);
if/else
if (condition) { statements; } else if (condition) { statements; } else { statements; }
if/else
de C, C++ y Javaswitch
switch (expression) { case value1: //Statements executed when the //result of expression matches value1 [break;] case value2: //Statements executed when the //result of expression matches value2 [break;] ... case valueN: //Statements executed when the //result of expression matches valueN [break;] [default: //Statements executed when none of //the values match the value of the expression [break;]] }
switch - case
de C, C++ y Java
break
sirve para salir del switch y continuar en la instrucción que sigue al switchwhile
while (condition) { statements; }
do { statements; } while (condition);
break
y continue
también se comportan como C++ y Javafor
for (initialization; condition; update) { statements; }
let sum = 0; for (let i = 0; i < 100; i++) { sum = sum + i; }
let s1 = "hello";
let s2 = "";
for (let i = 0; i < s.length; i++) {
s2 += s1[i] + s1[i];
}
// s2 stores "hheelllloo"
> < >= <= && || ! == != === !==
5 < "7"
es true
42 == 42.0
es true
"5.0" == 5
es true
===
y !==
son comprobaciones de igualdad estricta; comprueba tanto el valor y el tipo
"5.0" === 5
is false
null
y undefined
let ned = null;
let benson = 9;
let caroline;
// at this point in the code,
// ned is null
// benson's 9
// caroline is undefined
undefined
: no ha sido declarado, no existenull
: existe, pero se le ha asignado de forma específica un valor vacío o null
let name = []; // empty array let name = [value, value, ..., value]; // pre-filled name[index] = value; // store element
let ducks = ["Huey", "Dewey", "Louie"]; let stooges = []; // stooges.length is 0 stooges[0] = "Larry"; // stooges.length is 1 stooges[1] = "Moe"; // stooges.length is 2 stooges[4] = "Curly"; // stooges.length is 5 stooges[4] = "Shemp"; // stooges.length is 5
length
(crece según se añaden más elementos)let a = ["Stef", "Jason"]; // Stef, Jason a.push("Brian"); // Stef, Jason, Brian a.unshift("Kelly"); // Kelly, Stef, Jason, Brian a.pop(); // Kelly, Stef, Jason a.shift(); // Stef, Jason a.sort(); // Jason, Stef
let map = []; map[42] = "the answer"; map[3.14] = "pi"; map["champ"] = "suns";
Map
o una tabla hash alert("message"); // message confirm("message"); // returns true or false prompt("message"); // returns user input string
function name(params) { statement ; statement ; ... statement ; }
function myFunction() { console.log("Hello!"); alert("How are you?"); }
example.js
que se enlaza a una página HTML El alcance de una variable es la región del programa donde el nombre de la variable se puede usar.
La regla general establece que es mejor, para la mantenibilidad, la localización de la variables, es decir, mantener su alcance o ámbito limitado como sea posible para evitar "efectos secundarios" de otras partes del programa.
Mencionamos que la palabra reservada let
es una forma de declarar una variable en el ámbito en curso (p.e. entre {} para una instancia).
function sayHello(name) { let output = "Hello " + name; // output es local en sayHello console.log(output); }
Las variables globales son variables o símbolos que son visibles en todo el programa. Su uso puede no ser conveniente porque otro código y otros ficheros JS pueden acceder y modificarlos, de manera inesperada.
Ejemplo:
cuántos símbolos globales son introducidos por este código? 3 (count
, incr
,
y reset
)
let count = 0; // count es una variable global function incr(n) { // n es un parametro, local a la funcion incr let diez = 10; // diez es una variable local count += n; } function reset() { count = 0; // debido a que count es global se puede reasignar aqui // diez = 0; // diez no se puede reasignar aqui } incr(4); incr(2); console.log(count);
let
localiza el ámbito de una variable. Algunas veces con resultados interesantes.
Ejemplo:
let count = 0; // this count is a global variable function incr(n) { let count = 10; // this count is a local to incr count += n; } incr(4); incr(2); console.log(count);
var
No se recomienda el uso de var
debido a la permisividad en la gestión de variables.
function varTest() { console.log("varTest"); var x = 1; if (x === 1) { var x = 2; // same variable! console.log(x); // 2 } console.log(x); // 2 } function letTest() { console.log("letTest"); let x = 1; if (x === 1) { let x = 2; // different variable console.log(x); // 2 } console.log(x); // 1 }
Si se encierra todo el código en una función, ésta encierra el ámbito de todos los símbolos que están dentro de la función
Ejemplo:
cuántos símbolos globales son introducidos por este código? solo 1 (everything
)
function everything() { let count = 0; function incr(n) { count += n; } function reset() { count = 0; } incr(4); incr(2); console.log(count); } everything(); // call the function to run the code
function(parameters) { ... statements ...; }
JavaScript permite declarar funciones anónimas
De forma rápida crea una función sin darle un nombre
Se puede guardar como una variable, añadirse como un event handler, etc.
"use strict"; ...your code...
Escribiendo "use strict";
al inicio de cada fichero JS se indica el uso de la comprobación estricta de la sintaxis:
Se recomienda usar siempre el modo estricto
"use strict"; (function() { statements; })();
Envuelve todo el código de un fichero en una función anónima que es declarada e invocada inmediatamente
No se introducen símbolos globales
Las variables y funciones definidas en el código no puede ser accedido externamente
"use strict"; (function() { let count = 0; function incr(n) { count += n; } function reset() { count = 0; } incr(4); incr(2); console.log(count); })();
main
; responden a acciones del usuario llamados eventosEn general, para añadir interactividad a páginas HTML/CSS se necesita:
Name | Description |
---|---|
click | A pointing device button (e.g. mouse) has been pressed and released on an element |
dblclick | A pointing device button is clicked twice on an element |
mouseenter | A pointing device is moved onto an element that has the attached |
mouseover | A pointing device is moved onto the element that has the listener attached to itself or one of its children |
mousemove | A pointing device is moved over an element |
mousedown | A pointing device button is pressed on an element |
mouseup | A pointing device button is released over an element |
keydown | Any key is pressed down |
keyup | Any key is released |
Una lista completa de eventos se encuentra aquí
addEventListener
// attaching a named function element.addEventListener("click", handleFunction); function handleFunction() { // event handler code }
element.onclick
En general, para añadir interactividad a páginas HTML/CSS se necesita:
head
)<button>
<button id="my-btn">Púlsame!</button>
El texto del botón aparece dentro de la etiqueta, también puede contener imágenes
Para hacer que un botón u otro control UI responda:
Para acceder al elemento usar document.getElementById
let element = document.getElementById("id");
document.getElementById
devuelve un objeto para un elemento con el id indicadoid
en el documento.
Notar que se omite #
cuando se pide el id en JS
<img id="pokeball" src="images/pokeball.jpg" alt="a pokeball" /> <button id="demo-btn">Click me!</button>
let demoButton = document.getElementById("demo-btn"); demoButton.addEventListener("click", changeImage); function changeImage() { let pokeballImg = document.getElementById("pokeball"); pokeballImg.src = "images/mystery.gif"; }
Asociar el handler load para indicar que la página se ha cargado. Todo lo que se añade en la función asociada se ejecuta
"use strict"; (function() { // listener attached before page is loaded window.addEventListener("load", init); function init() { // this code is ran after page is loaded! let demoButton = document.getElementById("demo-btn"); demoButton.addEventListener("click", changeImage); } function changeImage() { let pokeballImg = document.getElementById("pokeball"); pokeballImg.src = "images/mystery.gif"; } })();
conjunto de objetos JavaScript que representan cada elemento de la página
div
<html> <head> <title> ... </title> </head> <body> <h1> ... </h1> <div> <p> ... </p> </div> </body> </html>
objectName.attributeName
Cada programa JavaScript puede hacer referencia a los siguientes objetos globales:
método | descripción |
---|---|
document | página HTML en curso y su contenido |
history | lista de las páginas que el usuario ha visitado |
location | URL de la página HTML en curso |
navigator | info acerca del navegador que se está usando |
screen | info acerca del área de la pantalla ocupado por el navegador |
window | la ventana del navegador |
<p> This is a paragraph of text with a <a href="/path/page.html">link in it</a>. </p>
<div id="main" class="foo bar"> <p>Hello, <em>very</em> happy to see you!</p> <img id="icon" src="images/borat.jpg" alt="Borat" /> </div>
Property | Description | Example |
---|---|---|
tagName
|
element's HTML tag |
document.getElementById("main").tagName is "div"
|
className
|
CSS classes of element |
document.getElementById("main").className is "foo bar"
|
innerHTML
|
content inside element |
document.getElementById("main").innerHTML is "\n <p>Hello, <em>ve...
|
src
|
URL target of an image |
document.getElementById("icon").src is "images/borat.jpg"
|
<input id="sid" type="text" size="7" maxlength="7" /> <input id="frosh" type="checkbox" checked="checked" /> Freshman?
Property | Description | Example |
---|---|---|
value
|
the text in an input control |
document.getElementById("sid").value could be "1234567"
|
checked
|
whether a box is checked |
document.getElementById("frosh").checked is true
|
disabled
|
whether a control is disabled (boolean) |
document.getElementById("frosh").disabled is false
|
readOnly
|
whether a text box is read-only |
document.getElementById("sid").readOnly is false
|
let paragraph = document.getElementById("welcome");
paragraph.innerHTML = "Welcome to our site!"; // change text on page
los objetos de elementos DOM tiene las siguientes propiedades:
innerHTML
: texto y/o etiquetas HTML dentro de un nodotextContent
: texto (no etiquetas HTML) dentro de un nodo
innerHTML
value
: el valor dentro de un control de formulariodocument.getElementyById(...)
document.querySelector(...)
document.querySelectorAll(...)
document.createElement(...)
<p id="october"></p>
let pTag = document.getElementById("october");
Los atributos HTML. Ejemplo:
<img src="images/puppy.png" alt="A fantastic puppy photo"/>
Tiene un objeto DOM (le llamamos puppyImg
) con dos propiedades:
puppyImg.src
-- asignado por el navegador a images/puppy.png
puppyImg.alt
-- asignado por el navegador a "A fantastic puppy photo"
<p>Vea nuestras <a href="sale.html" id="saleslink">Ofertas</a> today!</p> <img id="icon" src="images/borat.jpg" alt="Borat" /> <caption class="photo user-upload">Beauty.</caption>
let icon = document.getElementById("icon"); let theLink = document.getElementById("saleslink"); let caption = document.querySelector("caption");
Propiedad | Descripción | Ejemplo |
---|---|---|
tagName
|
element's HTML tag |
icon.tagName es "IMG"
|
className
|
CSS classes of element |
caption.className es "photo user-upload"
|
src
|
URL target of an image |
icon.src is "images/borat.jpg"
|
href |
URL target of a link |
theLink.href is "sale.html"
|
innerHTML
Todos los elementos DOM tienen una propiedad llamada innerHTML
que tiene el contenido de la etiqueta HTML como un string:
<ul id="dr-seuss"> <li>Thing 1</li> <li>Thing 2</li> </ul>
let elm = document.getElementById("dr-seuss"); // elm.innerHTML : "\n <li>Thing 1</li>\n <li>Thing 2</li>\n"
innerHTML
<button id="button">Click me!</button> <span id="output">Hello </span>
window.onload = function () { document.getElementById("button").onclick = addText; } function addText() { let span = document.getElementById("output"); span.innerHTML += " ... goodbye"; }
Se puede cambiar el texto dentro de los elementos asignando la propiedad innerHTML
innerHTML
// bad code quality! Hard to maintain! Prone to bugs! let paragraph = document.getElementById("welcome"); paragraph.innerHTML = "<p>text and <a href=\"page.html\">link</a>";
innerHTML
puede inyectar contenido arbitrario HTML en una página
Sin embargo, esto es propenso a errores y está considerado como estilo pobre
innerHTML
para inyectar etiquetas HTML;
poner texto solamentefunction okayClick() { this.style.color = "red"; // <-- bad style this.className = "highlighted"; // <-- better style }
.highlighted { color: red; }
Un script JavaScript bien escrito debe contener la menor o nula referencia a CSS como sea posible
Usar JS para configurar clases/IDs CSS sobre elementos
Definir los estilos de esas clases/IDs en el fichero CSS
<button id="clickme">Color Me</button>
window.onload = function() { document.getElementById("clickme").onclick = changeColor; }; function changeColor() { let clickMe = document.getElementById("clickme"); clickMe.style.color = "red"; }
Property | Description |
---|---|
style
|
lets you set any CSS style property for an element |
camelCasedNames
backgroundColor
, borderLeftWidth
, fontFamily
document.getElementById
Un método que se usa con mucha frecuencia es document.getElementById. Por ello es mejor declarar una forma abreviada para su uso
function id(id) { return document.getElementById(id); }
Ejemplo:
<input type="button" id="dothething" />
let button2 = document.getElementById("dothething"); let button = id("dothething"); // returns the same as above.
<head> <script src="myfile.js" type="text/javascript"></script> </head> <body> ... </body> </html>
function f(n) { return n + 1; } function g(n) { return n - 1; } x = f(x);
El fichero JS se ejecuta cuando el navegador carga la etiqueta script
Importante! En el punto temporal, el navegador todavía no ha leído el body
de la página
load
function init() { // put code to initialize the page here } // Add a function that will be called when the window is loaded.: window.addEventListener("load", init);
Hay un evento global llamado load
que ocurre una vez que todos los elementos de la página han sido cargados
Si se asocia una función como gestor para window.addEventListener
, se ejecutará en ese momento
<button id="ok">OK</button> <!-- (1) -->
// called when page loads; sets up event handlers function pageLoad() { let ok = document.getElementById("ok"); // (3) ok.addEventListener("click", okayClick) ; } function okayClick() { alert("booyah"); // (4) } window.addEventListener("load", pageLoad); // (2)
Descargar module-template.js y usarlo como punto de partida
<script src="path/to/javascript/file.js"></script>
(function() { window.addEventListener("load", init); function init() { { // your code goes here }; function exampleFunction1() { /* SOME CODE */ } function exampleFunction2(someVariable) { /* SOME CODE */ return something; } /* --- Helper Functions --- */ function id(idName) { return document.getElementById(idName); } function qs(selector) { return document.querySelector(selector); } function qsa(selector) { return document.querySelectorAll(selector); } })();
this
this.fieldName // access field this.fieldName = value; // modify field this.methodName(parameters); // call method
window
(por tanto this
=== window
)
window
this
se refiere al objeto en curso window.onload = function() { document.getElementById("textbox").onmouseout = booyah; }; function booyah() { // booyah knows what object it was called on this.value = "booyah"; }
Los gestores de eventos añadidos de forma no intrusiva se vinculan al elemento
Dentro del gestor, ese elemento se convierte en this
this
con desplegables
name | description |
---|---|
load ,
unload
|
the browser loads/exits the page |
resize
|
the browser window is resized |
error
|
an error occurs when loading a document or an image |
contextmenu
|
the user right-clicks to pop up a context menu |
window
. $(window).on('contextmenu', function);
event name | description |
---|---|
submit
|
form is being submitted |
reset
|
form is being reset |
change
|
the text or state of a form control has changed |
<body> <div> <p> Events are <em>crazy</em>! </p> </div> </body>
function anotherHandler(evt) { alert("You clicked on the inner P tag"); evt.stopImmediatePropagation(); }
stopImmediatePropagation()
para prevenir que un gestor ulterior sea ejecutado.Con frecuencia se requiere agregar un gestor de eventos a un grupo de elementos.
let btns = document.querySelectorAll("#game > button.control"); for (let i = 0; i < btns.length; i++) { btns[i].observe("click", gameButtonClick); } function gameButtonClick(evt) { ... }
addEventListener
de DOM.
document.getElementById("myid").addEventListener("click", function);
let evt = document.createEvent("click"); evt.initEvent("click", true, true); document.getElementById("myid").dispatchEvent("click");
let name = { fieldName: value, ... fieldName: value };
let pt = { x: 4, y: 3 }; alert(pt.x + ", " + pt.y);
Point
; tiene campos llamados x
e y
typeof(pt) === "object"
let name = { ... methodName: function(parameters) { statements; } };
let pt = {
x: 4, y: 3,
distanceFromOrigin: function() {
return Math.sqrt(this.x * this.x + this.y * this.y);
}
};
alert(pt.distanceFromOrigin()); // 5
this
this
es obligatoria en JSSi se desea crear una clase nueva, no solo un objeto
// Creates and returns a new Point object. (This is bad code.)
function constructPoint(xValue, yValue) {
let pt = {
x: xValue, y: yValue,
distanceFromOrigin: function() {
return Math.sqrt(this.x * this.x + this.y * this.y;
}
};
return pt;
}
let p = constructPoint(4, -3);
new
que se ha usado antes
// Constructs and returns a new Point object.
function Point(xValue, yValue) {
this.x = xValue;
this.y = yValue;
this.distanceFromOrigin = function() {
return Math.sqrt(this.x * this.x + this.y * this.y);
};
}
let p = new Point(4, -3);
new
, JavaScript hace lo siguiente:
this
dentro de la función new
?
let p = Point(4, -3);
// Constructs and returns a new Point object.
function Point(xValue, yValue) {
this.x = xValue;
this.y = yValue;
this.distanceFromOrigin = function() {
return Math.sqrt(this.x * this.x + this.y * this.y);
};
}
Point
tiene su propia copia entera del código distanceFromOrigin
Object.prototype
String.prototype
, etc.
undefined
.
// also causes Point.prototype to become defined
function Point(xValue, yValue) {
...
}
Point
, se crea Point.prototype
Point
usará Point.prototype
// adding a method to the prototype
className.prototype.methodName = function(parameters) {
statements;
}
Point.prototype.distanceFromOrigin = function() { return Math.sqrt(this.x * this.x + this.y * this.y); };
Point
// Computes the distance between this point and the given point p. Point.prototype.distance = function(p) { let dx = this.x - p.x; let dy = this.y - p.y; return Math.sqrt(dx * dx + dy * dy); }; // Returns a text representation of this object, such as "(3, -4)". Point.prototype.toString = function() { return "(" + this.x + ", " + this.y + ")"; };
Point
se puede guardar en un fichero Point.js
toString
funciona de forma similar como en Java// add a 'contains' method to all String objects String.prototype.contains = function(text) { return this.indexOf(text) >= 0; }; // add a 'lightUp' method to all HTML DOM element objects HTMLElement.prototype.lightUp = function() { this.style.backgroundColor = "yellow"; this.style.fontWeight = "bold"; };
function SuperClassName(parameters) { // "superclass" constructor
...
};
function SubClassName(parameters) { // "subclass" constructor
...
};
SubClassName.prototype = new SuperClassName(parameters); // connect them
SubClassName.prototype = SuperClassName.prototype; // connect them
// Constructor for Point3D "class" function Point3D(x, y, z) { this.x = x; this.y = y; this.z = z; }; Point3D.prototype = new Point(0, 0); // set as "subclass" of Point // override distanceFromOrigin method Point3D.prototype.distanceFromOrigin = function() { return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); };
super
Usados para retardar o asignar intervalos de tiempo para la ejecución de funciones
método | descripción |
---|---|
setTimeout(function, delayMS);
|
arranges to call given function after given delay in ms |
setInterval(function, delayMS);
|
arranges to call function repeatedly every delayMS ms |
clearTimeout(timerID); clearInterval(timerID);
|
stops the given timer so it will not call its function |
setTimeout
como setInterval
retornan un ID que representa el timer
clearTimeout
/Interval
después para parar el timer
setTimeout
<button id="clickme">Click me!</button> <span id="outputText"></span>
window.addEventListener("load", msg); function msg() { but = document.getElementById("clickme"); but.addEventListener("click", delayedMessage); }; function delayedMessage() { document.getElementById("outputText").innerHTML = "Wait for it..."; setTimeout(sayBooyah, 5000); } function sayBooyah() { // called when the timer goes off document.getElementById("outputText").innerHTML = "BOOYAH!"; }
setInterval
let timer = null; // stores ID of interval timer function delayMsg2() { if (timer == null) { timer = setInterval(rudy, 1000); } else { clearInterval(timer); timer = null; } } function rudy() { // called each time the timer goes off document.getElementById("output").innerHTML += " Rudy!"; }
function delayedMultiply() {
// 6 and 7 are passed to multiply when timer goes off
setTimeout(multiply, 2000, 6, 7);
}
function multiply(a, b) {
alert(a * b);
}
()
cuando se pasa la función. Si se hace se invoca la función de forma inmediata en lugar de esperar el delay estipulado
setTimeout(booyah(), 2000);setTimeout(booyah, 2000);setTimeout(multiply(num1 * num2), 2000);setTimeout(multiply, 2000, num1, num2);
canvas
<canvas id="mycanvas"
width="200" height="150"></canvas>
context
a partir del cual se puede dibujar cosas, recuerda Graphics g
var ctx = document.getElementById("mycanvas").getContext("2d");
ctx.fillStyle = "#FF0000"; ctx.strokeStyle = "#00FF00"; for (var i = 0; i < 10; i++) { ctx.fillRect(i * 20, i * 10, 400 - i * 40, 200 - i * 20); ctx.strokeRect(i * 20, i * 10, 400 - i * 40, 200 - i * 20); }
método canvas | análogo DrawingPanel |
---|---|
ctx.fillText(string, x, y); | g.drawString(str, x, y); |
ctx.fillRect(x, y, width, height); | g.fillRect(x, y, width, height); |
ctx.beginPath(); ctx.arc(x, y, radius, startAngle, endAngle); ctx.stroke(); |
g.drawOval(x, y, width, height); |
ctx.beginPath(); ctx.moveTo(x1, y1); ctx.lineTo(x2, y2); ctx.stroke(); |
g.drawLine(x1, y1, x2, y2); |
ctx.fillStyle = "#FF0000" | g.setColor(color); |
canvas
timer
timer
se ha terminadocanvas
puede recibir eventos del ratón
canvas
Revisión de programas básicos: uso de variables, arrays, ciclos, if-instrucciones, y funciones
JavaScript tutoriales:
Práctica! Problemas de JavaScript Practice-It
Revisar ejemplos de JavaScript en la web!
Tutoriales
Animación con JS