tengo un swf de 900 x 368 realizado en AS3 donde cargo imagenes aleatorias mediante un XML
y necesito que cada imagen tenga un vinculo a una url distinta.
todo funciona ok solo me falta agregar ese detalle! donde tendría que insertar el código para que al pasar sobre determinada imagen y haga click redireccione a una pagina html en la opción _self ??
mi XML es:
-----------------------------------------------------------------------------------------------------------------------------
Código :
<?xml version="1.0" encoding="utf-8"?> <slide> <config> <!--Configuración general de la presentación--> <control>auto</control> <loop>true</loop> <time>5</time> <effect_time>1</effect_time> <random>true</random> <!--Configuración de la barra de progreso--> <preload>true</preload> <preload_width>400</preload_width> <preload_height>2</preload_height> <!--Configuración de los textos--> <text_font>Arial</text_font> <text_color>0xFFFFFF</text_color> <text_bold>false</text_bold> <text_size>26</text_size> <text_shadow>true</text_shadow> <text_pos>BR</text_pos> <text_margin>20</text_margin> </config> <images> <!--Lista de las imagenes--> <imagen src="images/lambayeque_chaparrilodge.jpg" effect="fade"/> <imagen src="images/apurimac_tampumayu.jpg" effect="fade"/> <imagen src="images/junin_santamaria.jpg" effect="fade"/> <imagen src="images/huanuco_haciendasantacruz.jpg" effect="fade"/> <imagen src="images/cusco_hotelruinas.jpg" effect="fade"/> <imagen src="images/ica_casasur.jpg" effect="fade"/> <imagen src="images/tingomaria-huanuco_maderaverde.jpg" effect="fade"/> <imagen src="images/huancayo_lomaverde.jpg" effect="fade"/> <imagen src="images/lima_hotelgirasoles.jpg" effect="fade"/> <imagen src="images/hotelgrandmare.jpg" effect="fade"/> <imagen src="images/lima_haciendalaflorida.jpg" effect="fade"/> <imagen src="images/ica_wasipunko.jpg" effect="fade"/> <imagen src="images/arequipa_casitasdelcolca.jpg" effect="fade"/> <imagen src="images/ica_vinasqueirolo.jpg" effect="fade"/> <imagen src="images/arequipa_colcalodge.jpg" effect="fade"/> </images> </slide>
-----------------------------------------------------------------------------------------------------------------------------
en el unico frame del .fla esta el codigo:
Código ActionScript :
var mySlideShow:slideShow = new slideShow(this, "images.xml", stage.stageWidth, stage.stageHeight); mySlideShow.start();
todos los parámetros estan en un archivo llamado: slideShow.as
Código ActionScript :
package {
//---Imports
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.display.Loader;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.Font;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.events.*;
import flash.utils.Timer;
import flash.filters.DropShadowFilter;
import fl.controls.ProgressBar;
import fl.controls.ProgressBarMode;
import gs.TweenLite;
import gs.easing.*;
import slideTransitions;
public class slideShow extends Sprite{
private var _cont:DisplayObjectContainer;
private var _xmlSrc:String;
private var _slideXML:XML;
private var _config:Object;
private var _slideTimer:Timer;
private var _imageNumber:uint;
private var _play:Boolean;
private var _keyLeft:Boolean;
private var _keyRight:Boolean;
private var _ancho:Number;
private var _alto:Number;
private var _buttons:Object;
private var _added:Boolean;
private var _orderArray:Array;
//---Función constructora
public function slideShow(cont:DisplayObjectContainer, xmlSrc:String, ancho:Number, alto:Number, buttons:Object = null):void{
cont.mouseEnabled = false;
cont.mouseChildren = false;
_cont = cont;
_xmlSrc = xmlSrc;
_imageNumber = 0;
_config = new Object();
_play = false;
_keyLeft = false;
_keyRight = true;
_ancho = ancho;
_alto = alto;
_buttons = buttons;
_orderArray = new Array();
//---Crear la máscara del contenedor
var contMask:Sprite = new Sprite();
with(contMask.graphics){
beginFill(0xCCCCCC, 1);
drawRect(0, 0, 900, 368);
endFill();
}
contMask.x = _cont.x;
contMask.y = _cont.y;
_cont.mask = contMask;
_cont.parent.addChild(contMask);
//---Leer el XML
loadXML();
}
//---Función de leer el XML
private function loadXML():void{
var requestXML:URLRequest = new URLRequest(_xmlSrc);
var urlToLoad:URLLoader = new URLLoader();
//---Cuando termine de cargar
urlToLoad.addEventListener(Event.COMPLETE,
function(evt:Event):void{
_slideXML = new XML(URLLoader(evt.target).data);
//---Guardar las opciones de configuración
storeConfigOptions();
}
);
urlToLoad.load(requestXML);
}
//---Función de guardar las opciones de configuración
private function storeConfigOptions():void{
var config:XMLList = _slideXML.config.*;
var config_tot:uint = config.length();
var i:uint;
for(i = 0; i < config_tot; i++){
_config[config[i].name()] = config[i].toString();
}
//---Dar valor a variables depende de los settings
_slideTimer = new Timer(Number(_config.time) * 1000, 1);
_slideTimer.addEventListener(TimerEvent.TIMER, slideImages);
//---Si se han mandado botones
if(_buttons != null && _config.control == "manual"){
_buttons.next.buttonMode = true;
_buttons.prev.buttonMode = true;
_buttons.next.addEventListener(MouseEvent.CLICK, changeImageNext);
_buttons.prev.addEventListener(MouseEvent.CLICK, changeImagePrev);
}
//---Guardar el orden de las imágenes en un arreglo
orderArrayFunction();
//---Si se ha mandado a reproducir comenzar la reproducción
if(_play){
start();
}
}
//---Función de comenzar el slideshow
public function start():void{
_play = true;
if(_config.control == "auto"){
slideImages();
}else if(_config.control == "manual"){
slideImages();
_cont.stage.addEventListener(KeyboardEvent.KEY_DOWN, changeImage);
}
}
//---Función de detener el slideshow
public function stop():void{
_play = false;
}
//---Función de detener el slideShow
//---Función de crear el slide
private function slideImages(tEvt:TimerEvent = null):void{
_added = false;
var images:XMLList = _slideXML.images.*;
var imageSrc:String = images[_orderArray[_imageNumber]][email protected]();
var imageEffect:String = images[_orderArray[_imageNumber]][email protected]();
var effectTime:Number = Number(_config.effect_time);
var imageText:String = images[_orderArray[_imageNumber]][email protected]();;
var imageRequest:URLRequest = new URLRequest(imageSrc);
var loader:Loader = new Loader();
var progBar:ProgressBar;
//---Función de borrar el preload
var deletePreload:Function = function():void{
_cont.parent.removeChild(progBar);
}
//---Cuando se termine de leer la imagen
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,
function(evt:Event):void{
var myText:TextField = createSlideText(imageText);
var myTransition:slideTransitions = new slideTransitions(_cont, loader, myText);
var effectSprite:Sprite = myTransition.createEffect(imageEffect, effectTime);
//---Añadir el sprite al contenedor
_cont.addChild(effectSprite).name = "image" + _imageNumber;
_added = true;
//---Desparacer el loading
if(_config.preload == "true"){
TweenLite.to(progBar, 1, {alpha:0, ease:Cubic.easeOut, onComplete:deletePreload});
}
//---Cargada la imagen se procede a la próxima
nextFunction();
}
);
//---Si da error la lectura
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,
function(evt:IOErrorEvent):void{
trace("No se ha podido cargar la imagen: " + imageSrc);
}
);
//---Al comenzar la lectura
loader.contentLoaderInfo.addEventListener(Event.OPEN,
function(evt:Event):void{
if(_config.preload == "true"){
progBar = new ProgressBar();
progBar.mode = ProgressBarMode.EVENT;
progBar.width = Number(_config.preload_width);
progBar.height = Number(_config.preload_height);
progBar.x = _cont.x + (_ancho - progBar.width) / 2;
progBar.y = _cont.y + (_alto - progBar.height) / 2;
progBar.source = evt.target;
_cont.parent.addChild(progBar).name = "progBar";
//---Aparición de la barra de loading
TweenLite.from(progBar, 1, {alpha:0, ease:Cubic.easeOut});
}
}
);
//---Mandar a leer la imagen
loader.load(imageRequest);
}
//---Función d crear los textos
private function createSlideText(words:String):TextField{
//---Crear el estilo del texto
var textStyle:TextFormat = new TextFormat();
textStyle.font = _config.text_font;
textStyle.color = uint(_config.text_color);
textStyle.size = Number(_config.text_size);
textStyle.bold = Boolean(_config.text_bold);
//---Crear el texto
var slideText:TextField = new TextField();
with(slideText){
autoSize = "left";
selectable = false;
embedFonts = true;
antiAliasType = (_config.text_embed == "true") ? "advanced" : "normal";
text = words;
setTextFormat(textStyle);
}
//---Crear la sombra
if(_config.text_shadow == "true"){
var textShadow:DropShadowFilter = new DropShadowFilter(2);
var filtersArray:Array = new Array();
filtersArray.push(textShadow);
slideText.filters = filtersArray;
}
//---Ubicar el texto
var margin:Number = Number(_config.text_margin);
switch(_config.text_pos){
default:
case "TL":
slideText.x = margin;
slideText.y = margin;
break;
case "TC":
slideText.x = (_ancho - slideText.width) / 2;
slideText.y = margin;
break;
case "TR":
slideText.x = _ancho - slideText.width - margin;
slideText.y = margin;
break;
case "BL":
slideText.x = margin;
slideText.y = _alto - slideText.height - margin;
break;
case "BC":
slideText.x = (_ancho - slideText.width) / 2;
slideText.y = _alto - slideText.height - margin;
break;
case "BR":
slideText.x = _ancho - slideText.width - margin;
slideText.y = _alto - slideText.height - margin;
break;
}
//---Retornar el texto
return slideText;
}
//---Función de manejar las imágenes por las teclas
private function changeImage(evt:KeyboardEvent):void{
switch(evt.keyCode){
case 37:
if(_keyLeft && _added && _play){
_imageNumber--;
slideImages();
}
break;
case 39:
if(_keyRight && _added && _play){
_imageNumber++;
slideImages();
}
break;
}
}
//---Función de manejar las imágenes por botones
private function changeImageNext(evt:MouseEvent):void{
if(_keyRight && _added && _play){
_imageNumber++;
slideImages();
}
}
//---Función de manejar las imágenes por botones
private function changeImagePrev(evt:MouseEvent):void{
if(_keyLeft && _added && _play){
_imageNumber--;
slideImages();
}
}
//---Función de crear el orden de las imágenes
private function orderArrayFunction():void{
var images:XMLList = _slideXML.images.*;
var totalImages:uint = images.length();
var rand:uint;
var i:uint;
_orderArray.splice(0);
if(_config.random == "true"){
i = 0;
while(i < totalImages){
rand = Math.floor(Math.random() * totalImages);
if(_orderArray.indexOf(rand) < 0){
_orderArray[i] = rand;
i++
}
}
}else{
i = 0;
while(i < totalImages){
_orderArray[i] = i;
i++;
}
}
}
//---Función paea procesar la próxima imagen
private function nextFunction():void{
//---Si el control está en automático
if(_config.control == "auto" && _play){
_imageNumber++;
if(_imageNumber == _orderArray.length){
if(_config.loop == "true"){
_imageNumber = 0;
_slideTimer.start();
}
}else{
_slideTimer.start();
}
//---Si el control está por las teclas
}else{
if(_imageNumber == _orderArray.length - 1){
_keyRight = false;
}else if(_imageNumber == 0){
_keyLeft = false;
}else{
_keyRight = true;
_keyLeft = true;
}
}
}
}
} 