Detectores de eventos en AS3
- 30/12/2007
- 3:05 am
El manejo de eventos es el punto primordial para lograr interactividad en Flash, esto es detectar si el usuario realiza determinada acción (presiona un botón o una tecla por ejemplo) y de acuerdo a ello ejecutamos otra acción.
Utilizando Listeners
En ActionScript 3 (AS3) se ha hecho una cambio sustancial en el manejo de los eventos, se han eliminado completamente los eventos (onEnterFrame, onRollOver, onRelease, etc) y se ahora se pueden detectar la interacción utilizando listeners. Esto es si deseamos detectar un evento tenemos que agregar un listener especifico para llamar a una función cuando se detecte un evento.
-
addEventListener("nombreEvento", nombreFuncion);
En donde tenemos que nombreEvento es el evento que deseamos detectar y nombreFuncion es el nombre de la función que vamos a ejecutar si se detecta el evento. Por ejemplo si deseamos detectar el evento ENTER_FRAME podemos agregar el listener de la forma:
-
addEventListener(Event.ENTER_FRAME, onEnterClip);
Hay que notar que cada vez que ocurra el ENTER_FRAME nosotros ejecutaremos una función que en nuestro caso la hemos llamado onEnterClip.
Utilizando Eventos en Linea de Tiempo
Veamos primero la forma de implementar los eventos directamente en la linea de tiempo. Sea que tengamos un MovieClip llamado clip en el escenario de nuestra película, le agregamos el detector de eventos en el cual cambiamos de posición al clip.
-
clip.addEventListener(Event.ENTER_FRAME, onEnterClip);
-
function onEnterClip(event:Event) {
-
clip.x = clip.x + 2;
-
if (clip.x> 325) {
-
clip.x = -25;
-
}
-
}
Con lo cual tenemos el siguiente resultado:
Utilizando Eventos en Clases
Veamos ahora el ejemplo anterior, pero utilizando clases, para ello primero importamos la clase flash.events.Event que nos permitirá utilizar las propiedades de los eventos.
-
package {
-
import flash.display.Sprite;
-
import flash.events.Event;
-
public class ClipEvent extends Sprite {
-
public var clip:Sprite;
-
public function ClipEvent() {
-
clip = new Sprite();
-
addChild(clip);
-
// dibujamos el circulo
-
clip.graphics.beginFill(0x0099CC);
-
clip.graphics.drawCircle(0, 0, 25);
-
clip.graphics.endFill();
-
clip.x = stage.stageWidth/2;
-
clip.y = stage.stageHeight/2;
-
// agregamos el listener
-
clip.addEventListener(Event.ENTER_FRAME,onEnterClip);
-
}
-
public function onEnterClip(event:Event):void {
-
clip.x = clip.x + 2;
-
if (clip.x> 325) {
-
clip.x = -25;
-
}
-
}
-
}
-
}
Luego de exportar la película tenemos el siguiente resultado que es idéntico al ejemplo anterior.
Eventos para el Mouse
En ActionScript 2 todos los eventos del mouse eran detectados (mouseUp, mouseDown, mouseMove), ahora hay que agregar un listener si se desea detectar algún evento. Esto resulta ser optimo pues solo se detectarán los eventos a los que deseamos aplicarle alguna acción mejorando así el rendimiento de nuestra película.
Entonces ahora tenemos disponible una nueva clase flash.events.MouseEvent el cual brinda todos los eventos para el mouse los cuales son: CLICK, DOUBLE_CLICK, MOUSE_DOWN, MOUSE_MOVE, MOUSE_OUT, MOUSE_OVER, MOUSE_UP, MOUSE_WHEEL, ROLL_OUT, ROLL_OVER.
Entonces si deseamos agregarle un efecto cuando se para por encima de nuestro clip, agregaríamos dos listeners de la siguiente forma:
-
package {
-
import flash.display.Sprite;
-
import flash.events.Event;
-
import flash.events.MouseEvent;
-
public class MouseClipEvent extends Sprite {
-
public var clip:Sprite;
-
public function MouseClipEvent() {
-
clip = new Sprite();
-
addChild(clip);
-
clip.graphics.beginFill(0x0099CC);
-
clip.graphics.drawCircle(0, 0, 25);
-
clip.graphics.endFill();
-
clip.x = stage.stageWidth/2;
-
clip.y = stage.stageHeight/2;
-
clip.addEventListener(Event.ENTER_FRAME,onEnterClip);
-
clip.addEventListener(MouseEvent.MOUSE_OVER, onOver);
-
clip.addEventListener(MouseEvent.MOUSE_OUT, onOut);
-
}
-
public function onOver(event:MouseEvent):void {
-
clip.alpha = 0.5;
-
}
-
public function onOut(event:MouseEvent):void {
-
clip.alpha = 1;
-
}
-
public function onEnterClip(event:Event):void {
-
clip.x = clip.x + 2;
-
if (clip.x> 325) {
-
clip.x = -25;
-
}
-
}
-
}
-
}
Con lo cual obtenemos un efecto cada vez que pasamos encima del clip como se muestra a continuación.
Eventos del Teclado
Para el caso del teclado ahora a traves de la clase flash.events.KeyboardEvent se tienen disponibles dos tipos de eventos KEY_DOWN y KEY_UP. Luego por ejemplo si deseamos controlar la posición de nuestro clip utilizando el teclado podemos tener el siguiente codigo.
-
package {
-
import flash.display.Sprite;
-
import flash.events.Event;
-
import flash.events.KeyboardEvent;
-
import flash.ui.Keyboard;
-
-
public class KeyboardClipEvent extends Sprite {
-
public var clip:Sprite;
-
public function KeyboardClipEvent() {
-
clip = new Sprite();
-
addChild(clip);
-
clip.graphics.beginFill(0x0099CC);
-
clip.graphics.drawCircle(0, 0, 25);
-
clip.graphics.endFill();
-
clip.x = stage.stageWidth/2;
-
clip.y = stage.stageHeight/2;
-
stage.addEventListener(KeyboardEvent.KEY_DOWN,onKey);
-
}
-
public function onKey(event:KeyboardEvent):void {
-
switch (event.keyCode) {
-
case Keyboard.UP :
-
clip.y -= 5;
-
break;
-
case Keyboard.DOWN :
-
clip.y += 5;
-
break;
-
case Keyboard.LEFT :
-
clip.x -= 5;
-
break;
-
case Keyboard.RIGHT :
-
clip.x += 5;
-
break;
-
default :
-
break;
-
}
-
}
-
}
-
}
Ejecutando este código obtenemos el siguiente resultado:
Finalmente les dejo los archivos fuente de los ejemplos aqui mostrados para que puedan hacer sus practicas.
Posts Relacionados
- Precarga multiple en AS3
- Precargar archivos en AS3
- MovieClips en AS3
- Precargar archivos en Flash
- Enviar email con AS3 y PHP
Introducción a AJAX
- 25/12/2007
- 8:28 pm
AJAX (Asynchronous JavaScript And XML) es una técnica de desarrollo web que permite comunicar el navegador del usuario con el servidor en segundo plano, es decir se pueden hacer cambios sobre la misma página sin necesidad de recargarla.
El Objeto XMLHttpRequest
XMLHttpRequest es el objeto primario que nos permitirá la comunicación con el servidor de forma asíncrona, originalmente fue implementada para Internet Explorer y basada en un ActiveX y ahora los otros navegadores también la soportan.
Entonces lo primero es detectar el tipo de navegador y crear una instancia del objeto XMLHttpRequest para poder utilizarlo posteriormente, para ello implementamos la siguiente función en Javascript.
-
function createXMLHttpRequest() {
-
if (window.ActiveXObject) {
-
return new ActiveXObject("Microsoft.XMLHTTP");
-
} else if (window.XMLHttpRequest) {
-
return new XMLHttpRequest();
-
}
-
}
Métodos y Propiedades
El objeto XMLHttpRequest dispone de los siguientes métodos:
- send(content): permite enviar datos al servidor.
- abort(): termina o cancela la petición actual.
- getAllResponseHeaders(): devuelve todos los headers de respuesta a la petición HTTP como pares key/valor.
- getResponseHeader("header"): devuelve una cadena con el valor del header especificado en "header".
- open("method", "url"): permite realizar llamadas al servidor, el argumento del method puede ser GET, POST, o PUT.
- setRequestHeader("header", "value"): define un header especifico al valor dado por open().
Además de ello las propiedades disponibles son las siguientes:
- onreadystatechange: detector de eventos para ejecutar una función cada vez que se detecta el cambio en el estado de la petición.
- readyState: es el estado de la petición. Se tienes cinco estados posibles: 0 (sin iniciar), 1 (cargando), 2 (cargado), 3 (interactuando), 4 (completo)
- responseText: respuesta del servidor como un cadena de texto.
- responseXML: respuesta del servidor como un XML.
- status: código de estado HTTP del servidor (200, 404, etc.)
- statusText: código de estado HTTP del servidor como texto (OK, Not Found, etc)
Ejemplo de Interacción
Sea que tenemos un campo de texto en donde un usuario ingresa su email, deseamos que nuestra página valide automáticamente si este email es correcto. Lo primero que hacemos es detectar que el usuario sale del campo de ingreso de email y un boton para llamar a una función Javascript que se encarga de verificar el email.
El siguiente paso es crear la función validMail, el cual tomará en email ingresado lo enviará a un script llamado validate.php que devolverá si es o no valido.
-
var xmlHttp;
-
function validMail() {
-
var email = document.getElementById("email");
-
var url = "validate.php?email=" + escape(email.value);
-
xmlHttp = createXMLHttpRequest();
-
xmlHttp.open("GET", url);
-
xmlHttp.onreadystatechange = onCompleteData;
-
xmlHttp.send(null);
-
}
-
function onCompleteData() {
-
if (xmlHttp.readyState == 4) {
-
alert(xmlHttp.responseText);
-
}
-
}
Como se puede observar, creamos una instancia del objeto XMLHttpRequest utilizando la función creada anteriormente, luego procedemos a llamar al PHP utilizando el método GET para enviar los datos, luego cuando se detecta el cambio en el estado de la petición ejecutaremos la función onCompleteData, la cual la definimos posteriormente y se encarga de lanzar un alert con la respuesta del servidor.
Uniendo todos el código obtenemos nuestro ejemplo de AJAX funcionando y sin utilizar ninguna librería externa para ello:
-
<title>Ajax Demo - unijimpe</title>
-
<script language="JavaScript" type="text/javascript">
-
function createXMLHttpRequest() {
-
if (window.ActiveXObject) {
-
return new ActiveXObject("Microsoft.XMLHTTP");
-
} else if (window.XMLHttpRequest) {
-
return new XMLHttpRequest();
-
}
-
}
-
var xmlHttp;
-
function validMail() {
-
var email = document.getElementById("email");
-
var url = "validate.php?email=" + escape(email.value);
-
xmlHttp = createXMLHttpRequest();
-
xmlHttp.open("GET", url);
-
xmlHttp.onreadystatechange = onCompleteData;
-
xmlHttp.send(null);
-
}
-
function onCompleteData() {
-
if (xmlHttp.readyState == 4) {
-
alert(xmlHttp.responseText);
-
}
-
}
-
</script>
-
</head>
-
Validar Email con AJAX: <br>
-
<input type="button" id="bt" value="Send" onClick="validMail();">
-
</body>
-
</html>
Pueden ver el ejemplo funcionando en ajax-demo.html y como como siempre les dejamos los archivos fuente para que lo descarguen y hagan sus experimentos.
Posts Relacionados
- Introducción a jQuery
- Google AJAX Libraries API
- Buscador AJAX Youtube
- Backbase: AJAX Framework
- Tutorial de Google AJAX Search
Nuevo código Google Analytics
- 18/12/2007
- 12:04 am
Google Analytics el popular servicio para registrar y reportear visitas a páginas webs se renueva y ahora nos presenta un nuevo código para hacer el seguimiento de las visitas. Esta nueva versión es mucho mas rápida y pequeña con lo cual se logra rapidez en el seguimiento de visitas
Características
Esta nueva versión es un cambio sustancial y nos trae las siguientes características:
- Archivo mas pequeño y rápido
- Fácil de utilizar y entender
- Detección automática de HTTPS
- Mayor seguridad de los nombres de espacio
- Facilidad de personalizar el código de acuerdo a tus necesidades.
- Conveniente para hacer seguimiento de e-commerce y cross-domain.
Hay que notar que el código actual va a seguir funcionando todavía, pero es recomendables cambiar el código para acelerar el seguimiento de visitas.
Implementando el Nuevo Código
El código de seguimiento de Google Analytics es un código Javascript que se coloca típicamente antes de cerrar el html que se desea analizar. Actualmente el código hace el llamado a un archivo de nombre urchin.js como el que se muestra a continuación, en donde UA-XXXXX-N el código de seguimiento del web.
Ahora el nuevo código va a llamar al archivo gs.js el cual es un nuevo script optimizado y con nuevas carácterisiticas. La nueva forma de escribir el código es de la forma:
-
<script type="text/javascript">
-
var gaJsHost = (("https:" == document.location.protocol)
-
? "https://ssl." : "http://www.");
-
document.write("\<script src='" + gaJsHost +
-
"google-analytics.com/ga.js' type='text/javascript'>\<\/script>")
-
</script>
-
<script type="text/javascript">
-
var pageTracker = _gat._getTracker("UA-XXXXX-N");
-
pageTracker._initData();
-
pageTracker._trackPageview();
-
</script>
Quiza para algunos es un poco mas complejo el código pero es mucho mas eficiente y autodetecta si se esta trabajando sobre protocolo seguro.
Seguimiento de descargas
Anteriormente para hacer el seguimiento de descargas se utilizaba la función urchinTracker de la forma:
-
<a href="mydoc.pdf"
-
onclick="urchinTracker('/mydoc.pdf');">Save PDF</a>
Desde ahora la función para el seguimiento de acciones es _trackPageview y lo podemos implementar de la forma:
-
<a href="mydoc.pdf"
-
onclick="pageTracker._trackPageview('/mydoc.pdf');">Save PDF</a>
Como pueden observar son cambios menores el código pero que van a acelerar en gran manera el seguimiento de visitas, acelerando de esta forma el acceso a nuestras páginas.
Si desean conocer mas detalles de las nuevas funciones e instrucciones disponibles se ha puesto disponible un documento PDF llamado Tracking Code Migration Guide Switching from urchin.js to ga.js con una guia detallada de como migrar al nuevo código.
Posts Relacionados
- Google Analytics y WordPress
- Analytics Reporting Suite
- Google Analytics y Flash
- Posicionamiento para Bloggers
- Dos años de unijimpe!!!



