* JavaScript
* Características
* Programación dirigida por eventos
* Lenguajes
### Eventos
* Definición
* Tipos de eventos
* Mouse
* Teclado
* Navegador
* Formularios
* Event Handler
* Event Listeners
* Objeto del evento
* EcmaScript
* Jerarquía de Objetos
---
## JavaScript
Es un lenguaje de scripting **multiplataforma** y orientado a eventos y objetos.
Es **multiplataforma** porque su código puede ejecutarse en diversos entornos:
- **Navegadores web:** Para el front-end.
- **Servidores:** Para el back-end usando [Node.js](https://nodejs.org/es/)
- **Aplicaciones móviles:** Usando frameworks como React Native o NativeScript.
---
## Características
* Orientado a Eventos y Objetos
* Lenguaje Interpretado
* Tipado dinámico (una variable puede tomar valores de distinto tipo)
* Eficiente (reduce el tiempo y costo de desarrollo para las diversas plataformas)
* Flexible (permite crear amplia variedad de aplicaciones)
* Amplio Ecosistema (cuenta con una gran cantidad de librerías y Frameworks)
---
## Programación Dirigida por eventos
Paradigma de programación en el que la estructura y la ejecución de los programas van determinados por los
sucesos que ocurran en el sistema, definidos por el usuario o por el propio sistema.
El código no se ejecutará en un flujo lineal, sino, de forma asíncrona, según vayan ocurriendo los **eventos**.
---
## Lenguajes
* JavaScript
* ActionScript
* Visual Basic
* C#
* Visual C++
* etc...
---
## [Eventos](https://www.w3schools.com/jsref/dom_obj_event.asp)
Todo aquello que puede ser detectado y que pueda producir una reacción.
Ej. Hacer click en un botón, mover el puntero sobre un enlace, seleccionar un elemento de una lista desplegable, etc.
---
## Tipos de Eventos
* Eventos de Usuario
* Eventos del mouse
* Eventos del teclado
* Eventos del navegador
* Manipulación de las ventanas del navegador
* Comunicación con el servidor
* Eventos generados desde código
* Cambios en el contenido, aspecto o estructura
* Especificación DOM (Document Object Model)
---
## Eventos de Mouse
* **onClick**: Cuando el usuario hace clic con el mouse o el dedo en cualquier elemento HTML.
* **onMouseover, onMouseout**: El evento ocurre cuando el puntero se mueve hacia dentro (para el mouseover) o hacia afuera
(para el mouseout) un elemento, o uno de sus hijos.
* **contextmenu**: Cuando el usuario hace clic derecho en el mouse.
* **onMousemove**: Si el usuario mueve el mouse.
* **onMousedown, onMouseup**: Si el usuario presiona o suelta el mouse.
----
### Ejemplo de Evento de Mouse
````html
Sección de contenidos...
````
---
## Eventos de Teclado
* **onKeyup**: Cuando el usuario suelta la tecla del teclado.
* **onKeydown**: Cuando el usuario presiona la tecla del teclado.
* **onKeypress**: Cuando el usuario presiona y suelta la tecla del teclado. La diferencia de keydown/up es que Keypress
solo funciona con teclas de caracteres. Por ejemplo, no funciona en las flechas arriba
---
## Eventos Navegador
* **Unload**: Abandonar la página
* **Load**: El navegador ha terminado de cargar el sitio web.
* **Error**: El evento ocurre cuando se produce un error al cargar un archivo externo (como un CSS o un JavaScript).
* **Scroll**: El evento ocurre cuando se realiza scroll.
* **PageHide, PageShow**: Cuando el usuario se enfoca en una ventana/pestaña diferente; o cuando el usuario vuelve de
una ventana/pestaña diferente.
* **Resize**: Cuando la ventana se redimensiona.
* **Move**: Al mover la ventana del navegador
* **DragDrop**:Al soltar algo que se ha arrastrado sobre la página
* **Abort**: Al detenerse la carga de una imagen, de la página o irse de la pagina.
---
## Eventos de Formularios
* **Submit**: El evento ocurre cuando se envía un formulario.
* **Focusin, Focusout**: El evento ocurre cuando el puntero se mueve a un elemento o a uno de los elementos secundarios del elemento.
* **Input**: El evento ocurre cuando un elemento obtiene la entrada del usuario.
* **Change**: El evento ocurre cuando el contenido de un elemento del formulario, la selección o el estado previamente
establecido han cambiado (para ````