Comunidad de diseño web y desarrollo en internet online

Thickbox de Toni López

Citar            
MensajeEscrito el 15 Jul 2009 02:28 pm
Quería tener un thickbox sin utilizar javascript y que tenga un botón de cerrar. Para ello, buscando en google he encontrado el thickbox de Toni López, pero este se cierra pulsando en cualquier lugar de la imagen, pero no en un botón.He añadido a la clase las líneas marcadas en negrilla para intentar que se pueda cerrar con un botón.

/*
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

Por rfilgueiras

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Jul 2009 09:24 pm
¿alguien conoce algo similar sin utilizar javascript?

gracias

Por rfilgueiras

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Jul 2009 02:09 pm
¿puede ayudarme alguien en un sentido u otro?

gracias

Por rfilgueiras

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Ago 2009 06:02 pm
Hola rfilgueiras!

Tengo el mismo problema quisiera agregar un boton para cerrar el clipbox y que no se cierre al hacer click en la foto misma, traté de empezar con tu código modificado pero nada no sale la imagen que adapté como botón. no carga ninguna imagen. Al parecer el tema es medio complicado porque nadie responde

Por leftha

0 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.