domingo, 1 de octubre de 2017

Javascript Parte LXVI

El evento click se produce cuando el usuario hace un solo clic sobre el elemento HTML y suelta inmediatamente el botón del mouse en el mismo lugar y el dblclick cuando presiona en forma sucesiva en la misma ubicación.
Para probar como registramos estos eventos implementaremos una página que muestre dos div y definiremos el evento click para el primero y el evento dblclick para el segundo.




<html>
<head>

<script type="text/javascript">

  addEventListener('load',inicio,false);

  function inicio()
  {
    document.getElementById('recuadro1').addEventListener('click',presion1,false);
    document.getElementById('recuadro2').addEventListener('dblclick',presion2,false);
  }

  function presion1()
  {
    alert('se hizo click');
  }

  function presion2()
  {
    alert('se hizo doble click');
  }

</script>

</head>
<body>

<div style="width:200px;height:200px;background:#ffff00" id="recuadro1">
Prueba del evento click
</div>
<div style="width:200px;height:200px;background:#ff5500" id="recuadro2">
Prueba del evento dblclick
</div>

</body>
</html>
Primero registramos mediante la llamada al método addEventListener el evento load de la página (recordemos que esta forma de registrar los eventos no funciona en el IE8 o anteriores, pero en muy poco tiempo la cantidad de dispositivos con dichos navegadores serán ínfimas), y dentro de la función inicio registramos los eventos click y dblclick para los dos div que definimos en la página HTML:
  addEventListener('load',inicio,false);

  function inicio()
  {
    document.getElementById('recuadro1').addEventListener('click',presion1,false);
    document.getElementById('recuadro2').addEventListener('dblclick',presion2,false);
  }
Como vemos lo único que hacemos en los métodos que se disparan es mostrar un mensaje:
  function presion1()
  {
    alert('se hizo click');
  }

  function presion2()
  {
    alert('se hizo doble click');
  }

Javascript Parte LXV

El evento keydown se dispara cuando presionamos cualquier tecla del teclado, el evento keyup cuando soltamos una tecla. En cuanto el evento keypress en un principio procesa tanto cuando se la presionó y soltó, el único y gran inconveniente es que la mayoría de los navegadores no dispara el evento keypress para todas las teclas del teclado.
Para probar el evento keyup implementaremos un programa que permita solo ingresar 140 caracteres y nos informe con un mensaje la cantidad de caracteres disponibles para seguir escribiendo.
<html>
<head>

<script type="text/javascript">

  addEventListener('load',inicio,false);

  function inicio()
  {
    document.getElementById('texto').addEventListener('keyup',presion,false);
  }

  function presion()
  {
    var canti=document.getElementById('texto').value.length;
    var disponibles=140-parseInt(canti);
    document.getElementById('cantidad').innerHTML=disponibles;
  }

</script>

</head>
<body>
<input type="text" id="texto" maxlength="140" size="140">
<br>
<p>Máxama cantidad de caracteres disponibles:<span id="cantidad">140</span></p>
</body>
</html>
Definimos un control text y lo limitamos a 140 como máximo:
<input type="text" id="texto" maxlength="140" size="140">
Disponemos un elemento span para mostrar la cantidad de caracteres como máximo a ingresar:
<p>Máxama cantidad de caracteres disponibles:<span id="cantidad">140</span></p>
Registramos el evento keyup para el control texto:
  function inicio()
  {
    document.getElementById('texto').addEventListener('keyup',presion,false);
  }

Cada vez que se suelta la tecla cuando estamos escribiendo en el control de texto procedemos a extraer el valor del control texto y obtener mediante la propiedad length la cantidad de caracteres tipeados hasta este momento y seguidamente restamos a 140 el número de caractes tipeados y procedemos a mostrarlo en el elemento spam:
  function presion()
  {
    var canti=document.getElementById('texto').value.length;
    var disponibles=140-parseInt(canti);
    document.getElementById('cantidad').innerHTML=disponibles;
  }

Javascript Parte LXIV

El evento mousemove se dispara cada vez que desplazamos la flecha del mouse sobre el elemento HTML que esta escuchando este evento.
Este tipo de evento hay que utilizarlo con cuidado ya que puede sobrecargar el navegador, ya que este evento se dispara cada vez que desplazamos aunque sea solo un pixel.
Implementaremos para ver su funcionamiento una página que muestre un div que capture el evento mousemove y como acción incrementaremos un contador para saber la cantidad de veces que se disparó el evento.

<html>
<head>

<script type="text/javascript">

  addEventListener('load',inicio,false);

  function inicio()
  {
    document.getElementById('recuadro1').addEventListener('mousemove',mover,false);
  }

  function mover()
  {
    var x=parseInt(document.getElementById('cantidad').innerHTML);
    x++;
    document.getElementById('cantidad').innerHTML=x;
  }


</script>

</head>
<body>
<div style="width:200px;height:200px;background:#0000ff" id="recuadro1">
</div>
<p id="cantidad">0</p>

</body>
</html>
Disponemos un div y un párrafo donde mostramos el número 0:
<div style="width:200px;height:200px;background:#0000ff" id="recuadro1">
</div>
<p id="cantidad">0</p>
Capturamos el evento mousemove para el div:
  function inicio()
  {
    document.getElementById('recuadro1').addEventListener('mousemove',mover,false);
  }
Cada vez que se emite el evento mousemove se llama el método mover donde extraemos el valor del párrafo, lo incrementamos en uno y lo volvemos a actualizar:
  function mover()
  {
    var x=parseInt(document.getElementById('cantidad').innerHTML);
    x++;
    document.getElementById('cantidad').innerHTML=x;
  }

Javascript Parte LXIII

El evento mouseover se dispara cuando ingresamos con la flecha del mouse a un control HTML que tiene registrado dicho evento, y mouseout se dispara cuando sacamos la flecha del mouse del control.
Es muy común utilizar estos dos eventos para producir cambios en el elemento HTML cuando ingresamos la flecha del mouse y retornar al estado anterior cuando se saca la flecha del mouse.
Es importante hacer notar que estos eventos se disparan sin tener que presionar la flecha del mouse, solo con desplazarla al interior del elemento HTML se dispara el evento mouseover.
Implementaremos un pequeño ejemplo que muestre un cuadrado, el mismo mostrará los bordes redondeados cuando ingresemos la flecha del mouse en su interior y volverá al estado anterior cuando retiremos la flecha.
<html>
<head>

<script type="text/javascript">

  addEventListener('load',inicio,false);

  function inicio()
  {
    document.getElementById('recuadro1').addEventListener('mouseover',entrada,false);
    document.getElementById('recuadro1').addEventListener('mouseout',salida,false);
  }

  function entrada()
  {
    document.getElementById('recuadro1').style.borderRadius='30px';
  }

  function salida()
  {
    document.getElementById('recuadro1').style.borderRadius='0px';
  }

</script>

</head>
<body>
<div style="width:200px;height:200px;background:#0000ff" id="recuadro1">
</div>

</body>
</html>
Definimos en el HTML un div de color azul de 200 píxeles de lado:
<div style="width:200px;height:200px;background:#0000ff" id="recuadro1">
</div>
En la función inicio registramos los eventos mouseover y mouseout:
  function inicio()
  {
    document.getElementById('recuadro1').addEventListener('mouseover',entrada,false);
    document.getElementById('recuadro1').addEventListener('mouseout',salida,false);
  }
El método entrada se ejecuta cuando ingresemos la flecha del mouse en el div llamado recuadro1 y procedemos en el mismo a modificar la propiedad borderRadius del estilo de este elemento (indicamos que el redondeo de los vértices del div sea de 30 píxeles):
  function entrada()
  {
    document.getElementById('recuadro1').style.borderRadius='30px';
  }
Cuando sale la flecha del mouse del div se ejecuta la función salida donde fijamos con 0 la propiedad borderRadius:
  function salida()
  {
    document.getElementById('recuadro1').style.borderRadius='0px';
  }

Javascript Parte LXII

Otros dos eventos relacionados con el mouse son mousedown y mouseup.
El evento mousedown se dispara inmediatamente luego que presionamos con la flecha del mouse un elemento HTML que tiene registrado dicho evento.
El evento mouseup se ejecuta luego de soltar el botón del mouse estando dentro del control HTML.
Para probar estos eventos implementaremos una página que contenga dos div, a un div le asignaremos el evento mousedown y al otro el evento mouseup. Cuando ocurra el evento procederemos a cambiar el texto contenido dentro del div.


<html>
<head>

<script type="text/javascript">

  addEventListener('load',inicio,false);

  function inicio()
  {
    document.getElementById('recuadro1').addEventListener('mousedown',presion1,false);
    document.getElementById('recuadro2').addEventListener('mouseup',presion2,false);
  }

  function presion1()
  {
    document.getElementById('recuadro1').innerHTML='Se presione el mouse y todavía no se soltó';
  }

  function presion2()
  {
    document.getElementById('recuadro2').innerHTML='Se presione el mouse y se soltó';
  }

</script>

</head>
<body>
<p>Presione el recuadro amarillo sin soltar el botón del mouse.</p>
<div style="width:200px;height:200px;background:#ffff00" id="recuadro1">
</div>
<p>Presione el recuadro naranja y suelte el botón del mouse.</p>
<div style="width:200px;height:200px;background:#ff5500" id="recuadro2">
</div>

</body>
</html>
En la función inicio registramos los eventos mousedown y mouseup para los dos div, al div recuadro1 procedemos a registrar el evento mousedown y al div recuadro2 procedemos a registrar el evento mouseup:
  function inicio()
  {
    document.getElementById('recuadro1').addEventListener('mousedown',presion1,false);
    document.getElementById('recuadro2').addEventListener('mouseup',presion2,false);
  }
El método que se dispara para el primer div procedemos a modificar todo el contenido del div accediendo a la propiedad innerHTML:
  function presion1()
  {
    document.getElementById('recuadro1').innerHTML='Se presione el mouse y todavía no se soltó';
  }
De forma similar codificamos la función que modifica el segundo div:
  function presion2()
  {
    document.getElementById('recuadro2').innerHTML='Se presione el mouse y se soltó';
  }