Una pizarra en tiempo real interactiva creada usando RxJS para los eventos del ratón y dibujar directamente sobre un <canvas> en Angular o JavaScript puro.
- Características
- Requisitos
- Instalación
- Uso
- Cómo funciona bajo el capó
- Arquitectura & estilo
- Mejoras sugeridas
- Contribuciones
- Licencia
- Dibujo libre sobre
canvasusando eventos de ratón o touch. - Flujo reactivo gestionado con RxJS:
fromEvent,switchMap,pairwise,takeUntil. - Funciona en Angular o en JavaScript vanilla.
- Responsive y ligero.
- Node.js y npm (si lo integras en un proyecto Angular).
- Angular CLI (opcional, solo si usas Angular).
- Navegador moderno con soporte para Canvas y eventos de entrada.
-
Clona el repo:
git clone https://github.com/FrancoDavid/canvas-rxjs.git cd canvas-rxjs -
Si es parte de un app Angular:
npm install ng serve
-
En versiones sin framework, basta con servir los archivos estáticos (HTML/JS/CSS) en cualquier servidor local.
- Abre la app en un navegador (
ng serveolive-server). - Accede a la página con canvas.
- Haz clic y arrastra (o toca y arrastra) para dibujar.
- Suelta el ratón/touch y detén el dibujo.
Basado en patrones estándar de dibujo reactivo:
- Se escucha
mousedown(o touchstart). - Con
switchMap, se suscribe amousemovehastamouseupusandotakeUntil. pairwise()permite obtener pares consecutivos de eventos para dibujar líneas suaves.- Cada par de puntos se conecta con
canvasContext.lineTo(), partiendo desde el primero conbeginPath()([gist.github.com][1], [npmjs.com][2], [blog.huli.tw][3], [reddit.com][4]).
Esto crea un flujo funcional tipo “mousedown → dibujo → mouseup”.
-
RxJS: flujo reactivo puro con un único
subscribe, evitando anidado de suscripciones . -
Canvas API:
moveTo,lineTo,strokeStyle,lineWidth, etc. -
Estructura:
canvas-rxjs/ ├── index.html ├── canvas.js ← lógica principal RxJS+Canvas ├── styles.css └── angular/ ← (opcional) integración Angular con componente -
Código limpio, modular y fácil de portar a frameworks.
- Botones “Limpiar”, “Descargar como PNG”, “Deshacer/Rehacer”.
- Selección de color y grosor con RxJS.
- Soporte táctil completo.
- Guardado/restauración de dibujos en
localStorageo servidor. - Añadir tests (unitarios o visuales).
- Sincronización en tiempo real con WebSocket o WebRTC para pizarra colaborativa.
¡Encantado de recibir aportes!
- Haz fork.
- Crea rama
feature/nombre. - Añade cambios con commits claros.
- Abre PR detallando tu aporte.
MIT. Consulta LICENSE para más detalles.