/*
ThickBox, versión 1
actualizaciones: www.after-hours.org
autor: Toni López
versión: 1.0
*/
import mx.transitions.Tween;
import mx.transitions.easing.*;
class ThickBox {
/*
propiedades:
width,height: ancho y alto del objeto Stage
centerX, centerY: calor cálculado para centrar objetos (escenario/2) - (objeto/2)
box_width,box_height: ancho y alto inicial de la caja blanca
*/
private static var width:Number;
private static var height:Number;
private static var centerX:Number;
private static var centerY:Number;
private static var box_width:Number;
private static var box_height:Number;
private var x:Number;
private var y:Number;
/*
bg_mc: capa semitransparente que ocupa todo el ancho alto de la pantalla
box_mc: marco para la imagen
image_mc: contiene el clip contenedor holder_mc y tiene comprtamiento de botón.
holder_mc: carga la imagen
loader_mc: contiene el clip de película precarga.
*/
private static var bg_mc:MovieClip;
private static var box_mc:MovieClip;
private static var image_mc:MovieClip;
private static var newMC_mc :MovieClip;
private static var holder_mc:MovieClip;
private static var loader_mc:MovieClip;
// -- constructor de la clase
public function ThickBox () {
// -- ancho y alto del escenario
width = Stage.width;
height = Stage.height;
// -- calcular centrado
centerX = Stage.width / 2;
centerY = Stage.height / 2;
// -- tamaño de la caja inicial
box_width = 200;
box_height = 200;
}
/*
método: drawBox (dibujar cajas)
parámetros:
clip: Clip de películ destino.
x: Posición en eje _X
y: Posición en eje _y
w: Ancho final.
h: Alto final.
c: Color
a:Number
*/
private function drawBox (clip:MovieClip, x:Number, y:Number, w:Number, h:Number, c:Number, a:Number) {
clip.beginFill (c, a);
clip.lineTo (x, h);
clip.lineTo (w, h);
clip.lineTo (w, y);
clip.lineTo (x, y);
}
/*
método: loadThickBox (motor)
parámetros:
url: dirección donde se encuentra la imagen que se cargará
tween_mc: clip de película vinculado en la libreria del clip de película
que instancia a la clase (opcional)
*/
public function loadThickBox (url:String, tween_mc:String) {
// -- dibuja la capa negra con transparencia.
bg_mc = _root.createEmptyMovieClip ("bg_mc", _root.getNextHighestDepth ());
/*
Asignando evento de botón a la capa transparente(bg_mc), se evita que
los botones y clips de película en niveles inferiores reciban eventos.
*/
bg_mc.onRelease = disable ();
// -- aparece bg_mc con suavizado _alpha
drawBox (bg_mc, 0, 0, width, height, 0x000000, 30);
new Tween (bg_mc, "_alpha", None.easeOut, 0, 100, 1, true);
// -- dibuja la caja que alberga la imagen que se amplia.
box_mc = _root.createEmptyMovieClip ("box_mc", _root.getNextHighestDepth ());
box_mc._x = centerX - (box_width / 2);
box_mc._y = centerY - (box_height / 2);
drawBox (box_mc, 0, 0, box_width, box_height, 0xffffff, 100);
/*
Se asignan eventos de botón a image_mc, el evento onRelease, provoca
el cierre del ThickBox, el comportamiento botón se activa una vez finalizada
la carga de la imagen.
*/
image_mc = _root.createEmptyMovieClip ("image_mc", _root.getNextHighestDepth ());
image_mc.enabled = false;
//image_mc.onRelease = destroy;
newMC_mc = _root.createEmptyMovieClip ("newMC_mc", _root.getNextHighestDepth ());
newMC_mc.enabled = false;
newMC_mc.onRelease = destroy;
newMC_mc._x = 5;
newMC_mc._y = 5;
newMC_mc.width = 330;
newMC_mc.height = 110;
trace ("alto " + newMC_mc.height);
trace ("ancho " + newMC_mc.width);
// -- crear contenedor imagen
holder_mc = image_mc.createEmptyMovieClip ("holder_mc", _root.getNextHighestDepth ());
image_mc.holder_mc._alpha = 0;
// --
var mcLoader:MovieClipLoader = new MovieClipLoader ();
var listener:Object = new Object ();
// -- elminar animación preloader una vez alcanzado el 100% de la carga
listener.onLoadComplete = function (target:MovieClip):Void {
loader_mc.removeMovieClip ();
};
// --
listener.onLoadInit = function (target:MovieClip):Void {
// -- centrar image_mc.holder_mc
target._x = centerX - (target._width / 2);
target._y = centerY - (target._height / 2);
// -- tween ancho box_mc
var w1:Number = box_mc._width;
var w2:Number = target._width + 20;
var tx:Object = new Tween (box_mc, "_width", Regular.easeIn, w1, w2, 0.5, true);
// -- tween _x box_mc
var x1:Number = box_mc._x;
var x2:Number = centerX - (w2 / 2);
new Tween (box_mc, "_x", Regular.easeIn, x1, x2, 0.5, true);
tx.onMotionFinished = function () {
// -- tween _width box_mc
var h1:Number = box_mc._height;
var h2:Number = target._height + 20;
var ty:Object = new Tween (box_mc, "_height", Regular.easeIn, h1, h2, 0.5, true);
// -- tween _y box_mc
var y1:Number = box_mc._y;
var y2:Number = centerY - (h2 / 2);
new Tween (box_mc, "_y", Regular.easeIn, y1, y2, 0.5, true);
// -- tween _alpha image_mc
ty.onMotionFinished = function () {
new Tween (target, "_alpha", None.easeOut, 0, 100, 1, true);
// -- permite recibir eventos de botón a la imagen (onRelease = cerrar ThickBox)
image_mc.enabled = true;
newMC_mc.enabled = true;
};
};
};
mcLoader.addListener (listener);
mcLoader.loadClip (url, image_mc.holder_mc);
// -- mostrar animación precarga si se especificó.
attachPreloaderTween (tween_mc);
// --
}
// -- animación precargar
private function attachPreloaderTween (attached_mc:String):Void {
loader_mc = _root.createEmptyMovieClip ("loader_mc", _root.getNextHighestDepth ());
loader_mc.attachMovie (attached_mc, attached_mc, loader_mc.getNextHighestDepth ());
loader_mc._x = centerX - loader_mc._width / 2;
loader_mc._y = centerY - loader_mc._height / 2;
}
// -- esconde cursor mano para background gris
private function disable () {
bg_mc.useHandCursor = false;
}
// -- eliminar todos los clips de película
private function destroy ():Void {
box_mc.removeMovieClip ();
image_mc.removeMovieClip ();
newMC_mc.removeMovieClip ();
// -- la capa oscura desaparece con suavidad.
var at:Object = new Tween (bg_mc, "_alpha", None.easeOut, 80, 0, 0.5, true);
at.onMotionFinished = function () {
bg_mc.removeMovieClip ();
};
}
}
Si añado un loadMovie en la capa creada me carga la película correctamente y la veo en mi flash
pero no me funciona el cerrar ¿alquien me puede ayudar?
Gracias,
rodrigo
