Muchas veces nos es necesario hacer un efecto de zoom a ciertos clips o imágenes, por ejemplo cuando tenemos mapas, entornos que muestran opciones más pequeñas conforme se van acercando a ella, etc. Realizar este efecto es muy útil y ayuda a la usabilidad de nuestra aplicación.
En este caso en específico explicaré sólo el método de acercamiento por medio del click del mouse a un lugar en específico del clip.
Lo que necesitaremos será el clip a trabajar, dentro del cual podremos poner lo que queramos, imágenes, dibujos, etc. Luego le asignamos un nombre de instancia (en este caso mapa) y sólo resta copiar este código en el primer frame de la película principal.
Código :
incremento = 2;
function zoom(x,y,ancho,alto, aceleracion) {
mapa.onEnterFrame = function() {
this._x += (x-this._x)/aceleracion;
this._y += (y-this._y)/aceleracion;
this._width += (ancho-this._width)/aceleracion;
this._height+= (alto-this._height)/aceleracion;
if (Math.abs(x-this._x)<0.5 && Math.abs(y-this._y)<0.5 && Math.abs(ancho-this._width)<0.5 && Math.abs(alto-this._height)<0.5) {
this._x = x;
this._y = y;
this._width = ancho;
this._height = alto;
delete this.onEnterFrame;
}
};
};
onMouseDown =function(){
if (mapa.hitTest(_xmouse,_ymouse)){
Alto = incremento*mapa._height;
Ancho = incremento*mapa._width;
x = _xmouse-((_xmouse-mapa._x) * incremento);
y= _ymouse-((_ymouse-mapa._y) * incremento);
zoom(x,y,Ancho,Alto,3);
}
};
¡Y listo! Ya puede usarse, sólo prueba dando click encima del clip.
Incremento es la variable que determina el tamaño del acercamiento, en este caso lo incrementa en un 200% puede ser modificable a nuestro antojo.
Esta porción de código es parte de este tip con la diferencia que incrementa dos variables más, ancho y alto, las cuales se encargarán de modificar el ancho y el alto del clip, haciendo la misma función que las variables de columna y fila y la misma comprobación, si se ha cumplido, para poder eliminar el enterframe.
Código :
function zoom(x,y,ancho,alto, aceleracion) {
mapa.onEnterFrame = function() {
this._x += (x-this._x)/aceleracion;
this._y += (y-this._y)/aceleracion;
this._width += (ancho-this._width)/aceleracion;
this._height+= (alto-this._height)/aceleracion;
if (Math.abs(x-this._x)<0.5 && Math.abs(y-this._y)<0.5 && Math.abs(ancho-this._width)<0.5 && Math.abs(alto-this._height)<0.5) {
this._x = x;
this._y = y;
this._width = ancho;
this._height = alto;
delete this.onEnterFrame;
}
};
};
La siguiente parte es la importante, lo primero que hará será detectar si el mouse ha sido presionado.
Código :
onMouseDown =function(){
Esto hará la comprobación por medio de la cual verificará si las coordenadas del mouse en el momento que se presionó están sobre el clip, lo cual indicará que se ha echo click sobre él.
Código :
if (mapa.hitTest(_xmouse,_ymouse)){
Después de eso se calculará el tamaño de la película con el zoom:
Código :
Alto = incremento*mapa._height; Ancho = incremento*mapa._width;
que es donde interviene la variable incremento, la cual, reitero, podremos manejar a nuestro antojo.
Luego haremos el cálculo de la nueva posición del clip, ya que si lo dejamos en esa posición, se nos moverá hacia la derecha y hacia abajo, lo cual nos desubica, para lo cual se emplea la siguiente ecuación:
Código :
x = _xmouse-((_xmouse-mapa._x) * incremento); y= _ymouse-((_ymouse-mapa._y) * incremento);
Y por último le mandamos a la función los parámetros y ella se encargará del resto.
Código :
zoom(x,y,Ancho,Alto,3);
Nota: es importante que al crear el clip, el punto de registro sea a la izquierda arriba.
Espero les sirva.
Si te sirvio este post y quieres divertirte un poco ahora da click aqui y Visita Soportalo.com Post nuevos todos los dias
Hola Fento,
he llegado aqui a través de los foros de Cristalab. Creo que lo que posteas es lo que estoy buscando, pero no consigo hacerlo. ¿Te importaría poner un ejemplo en .fla para poder descargarlo y ver qué es lo que estoy haciendo mal? O puedes enviarmelo por mail si no quieres colgarlo aqui, aunque creo que a más de uno nos vendría bien.
Un saludo y gracias por todo!
Yo tambien llegue de Cristallab y me anda ok en AS2. Solo que aun no pude regresar la imagen a tamaño inicial…aunque deberia ser sencillo. Gracias por compartir
Muchas gracias por compartir tu codigo me hubiera tardado mas tiempo hacerlo!, si se quiere hacer un alejamiento, solo se tiene que dividir entre el incremento, ya que el tamaño esta en fundion del incremento
. En mi caso puse dos botoncitos uno para acercar y otro para alejar, el boton de alejar tiene la siguiente accion.
[code]
on (press) {
if (_root.pages.hitTest(_xmouse,_ymouse)){
Alto = _root.pages._height / _root.incremento; //---ZoomOut
Ancho = _root.pages._width /_root.incremento; //------ZoomOut
x = _xmouse-((_xmouse-_root.pages._x) * _root.incremento);
y= _ymouse-((_ymouse-_root.pages._y) * _root.incremento);
_root.zoomIn(x,y,Ancho,Alto,3);
}
};
[/code]
Me gustaría que me mandaran el fla al correo electrónico..
muchas gracias por el post.
el correo es fgarcia@aenor.es
hola
me gustaría que me explicaran como poner el código si utilizo botones para + y – zoom
gracias!
A mi tmbn me gustaria q nos pudieras explicar como funciona el codigo con botones de + y -
De antemano muchas gracias
A mi me gusto el tema de hacerlo directo con el mouse es super practico, Pero plisss no puedo regresarlo jajajaj
tal vez si le pongo numeros negativos al porcentaje… jajaja
pero me gustaria alejarme de nuevo con el segundo boton
Saludos, solo queria saber si podrian ayudarnos a hacer esto con los botones de zoom, uno para alejar o otro para acercar….y si se puede hasta un boton que nos envie a la imagen con tamaño original..jejeje.saludos.
dfsfsdfsdf
ola a todos