Canvas 2D con JavaScript: dibujar datos en un lienzo

Aprende a usar el elemento canvas y su contexto 2D para limpiar, dibujar y repintar formas desde datos controlados por JavaScript.

Canvas sirve cuando necesitas dibujar píxeles o gráficos controlados por JavaScript: visualizaciones, juegos simples, editores, trazos, partículas o fondos generativos.

A diferencia del DOM, no creas un nodo por cada forma. Trabajas sobre un lienzo y lo repintas cuando cambia el estado.

En esta lección vas a usar <code>getContext('2d')</code>, limpiar con <code>clearRect</code> y dibujar formas desde arrays de datos.

Antes de llegar aquí conviene dominar [render dinámico](/curso/javascript/leccion/javascript-render-dinamico-medio), porque la idea de estado -> dibujo es la misma.

  • En DOM modificas nodos; en canvas pintas sobre una superficie.
  • Si necesitas que cada elemento sea seleccionable, semántico o accesible por separado, DOM suele ser mejor. Si necesitas muchas formas, animación o dibujo libre, canvas encaja mejor.
  • El canvas no recuerda objetos como 'círculo' o 'cuadrado'. Si quieres cambiar algo, guardas los datos en JavaScript, limpias el lienzo y vuelves a dibujar.
  • Todo empieza con una referencia al canvas y su contexto 2D.
  • <code>getContext('2d')</code> devuelve el objeto que contiene los métodos de dibujo: líneas, rectángulos, texto, arcos, relleno y limpieza.

Canvas no es DOM: es dibujo inmediato

En DOM modificas nodos; en canvas pintas sobre una superficie.

Si necesitas que cada elemento sea seleccionable, semántico o accesible por separado, DOM suele ser mejor. Si necesitas muchas formas, animación o dibujo libre, canvas encaja mejor.

El canvas no recuerda objetos como 'círculo' o 'cuadrado'. Si quieres cambiar algo, guardas los datos en JavaScript, limpias el lienzo y vuelves a dibujar.

Obtener contexto y preparar el primer dibujo

Todo empieza con una referencia al canvas y su contexto 2D.

<code>getContext('2d')</code> devuelve el objeto que contiene los métodos de dibujo: líneas, rectángulos, texto, arcos, relleno y limpieza.

Antes de dibujar una forma compleja, usa <code>beginPath()</code> para iniciar un trazo limpio y evitar mezclar caminos anteriores.

Repintar desde datos

El patrón estable es limpiar, recorrer datos y dibujar.

Cuando cambian color, tamaño o posiciones, no intentes borrar una forma concreta a mano. Limpia el canvas completo con <code>clearRect</code> y dibuja el estado actual.

Este patrón evita residuos visuales y hace que cada render sea predecible.

JavaScript
30

Canvas 2D con JavaScript: dibujar datos en un lienzo

Aprende a usar el elemento canvas y su contexto 2D para limpiar, dibujar y repintar formas desde datos controlados por JavaScript.

Código del tema: canvas · getContext · draw

📘 Teoría

Canvas no es DOM: es dibujo inmediato

En DOM modificas nodos; en canvas pintas sobre una superficie.

Si necesitas que cada elemento sea seleccionable, semántico o accesible por separado, DOM suele ser mejor. Si necesitas muchas formas, animación o dibujo libre, canvas encaja mejor.

El canvas no recuerda objetos como 'círculo' o 'cuadrado'. Si quieres cambiar algo, guardas los datos en JavaScript, limpias el lienzo y vuelves a dibujar.

1

DOM

2

Canvas

3

Estado

Obtener contexto y preparar el primer dibujo

Todo empieza con una referencia al canvas y su contexto 2D.

1

getContext('2d') devuelve el objeto que contiene los métodos de dibujo: líneas, rectángulos, texto, arcos, relleno y limpieza.

2

Antes de dibujar una forma compleja, usa beginPath() para iniciar un trazo limpio y evitar mezclar caminos anteriores.

Repintar desde datos

El patrón estable es limpiar, recorrer datos y dibujar.

1

Cuando cambian color, tamaño o posiciones, no intentes borrar una forma concreta a mano. Limpia el canvas completo con clearRect y dibuja el estado actual.

2

Este patrón evita residuos visuales y hace que cada render sea predecible.

🧪 Aprende probando

Ejemplo Ejemplo guiado: dibujar una marca de estado Pinta un círculo y un texto breve en el canvas usando contexto 2D.
Ejemplo Demo interactiva: formas dinámicas en canvas Controla cantidad, tamaño, color y forma para repintar un lienzo 2D desde datos generados en JavaScript.

🏁 Retos

Reto Reto: dibujar barras desde un array Convierte una lista de valores en barras proporcionales dentro del canvas.

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros. culTest

La hice en febrero de 2026 para facilitar el aprendizaje de mis alumnos. La idea es aprender desarrollo web practicando y que el proyecto siga creciendo con nuevos temas, tests y retos.

Está inspirada en MDN, W3Schools, CodePen, Manz y muchos otros sitios de documentación sobre desarrollo web. Quería combinar teoría útil, ejemplos ejecutables, retos y el sistema de tests que ya tenía en culTest. culTest

Si te gustó, si no te gustó o si quieres escribirme, puedes hacerlo en cristianeslava@gmail.com