"removeEventListener" mit "getChildByName" [Flash 9]
| Beiträge: 6 Registriert: May 2009
| 28.02.2011, 11:35
moin!
ich arbeite gerade an einer bildergallerie: diverse thumbnails werden über xml reingeladen, bei "MouseEvent.CLICK" sollen diese vergrössert werden, die anderen im hintergrund werden unsichtbar, bis dahin klappts soweit...aber: wenn ich nun beim ausgeben auf die bühne klicke und zufälligerweise ein im hintergrundstehendes, unsichtbares thumbnail erwische, wird dieses vergrössert. Also versuchte ich diese im hintergrund mit "removeEventListener" inaktiv zu machen, geht aber nicht! vielleicht liegts daran, dass ich diesen mit "getChildByName" anspreche?
kann mir da mal jemand weiterhelfen? vielen dank!!
auschnitt:
ActionScript:1 2 3 4 5 6 7 8 9 10 11 12 | load_img.addEventListener(MouseEvent.CLICK, thumbnailClick);
function thumbnailClick(evt:MouseEvent){
Tweener.addTween(load_img,{height:400, width:600, alpha:1, time:2, transition:"Strong"});
for(i=0;i<=numberOfImg-1;i++){
if(i!=nr){
trace(getChildByName("thumbnail_img"+i).name)
getChildByName("thumbnail_img"+i).removeEventListener(MouseEvent.CLICK, thumbnailClick)
getChildByName("thumbnail_img"+i).alpha = .1
Tweener.addTween(getChildByName("thumbnail_img"+i),{height:thumbnailH, width:thumbnailW, time:2, transition:"Strong"});
}
}
}
|
gesamter code:
ActionScript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | package {
// Klassen importieren
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.text.*;
//
import caurina.transitions.*;
//
import flash.utils.Timer;
import flash.events.TimerEvent;
public class control extends Sprite {
public var thumbnailH:Number=100;
public var thumbnailW:Number=150;
public var abstand:Number=50;
public var thumbnailX:Array=[0,abstand+thumbnailW,2*(abstand+thumbnailW),3*(abstand+thumbnailW),4*(abstand+thumbnailW),0,thumbnailW,abstand+thumbnailW,2*(abstand+thumbnailW),3*(abstand+thumbnailW),4*(abstand+thumbnailW),0,thumbnailW,abstand+thumbnailW,2*(abstand+thumbnailW),3*(abstand+thumbnailW),4*(abstand+thumbnailW),0,thumbnailW,abstand+thumbnailW,2*(abstand+thumbnailW),3*(abstand+thumbnailW),4*(abstand+thumbnailW)];
public var thumbnailY:Array=[0,0,0,0,0,abstand+thumbnailH,abstand+thumbnailH,abstand+thumbnailH,abstand+thumbnailH,abstand+thumbnailH,2*(abstand+thumbnailH),2*(abstand+thumbnailH),2*(abstand+thumbnailH),2*(abstand+thumbnailH),2*(abstand+thumbnailH),3*(abstand+thumbnailH),3*(abstand+thumbnailH),3*(abstand+thumbnailH),3*(abstand+thumbnailH),3*(abstand+thumbnailH)];
public function control() {
var bilder=[];
var XMLloader:URLLoader = new URLLoader();
XMLloader.load(new URLRequest("content.xml"));
XMLloader.addEventListener(Event.COMPLETE, XMLcomplete);
function XMLcomplete(evt:Event) {
var xml_dokument:XML=new XML(evt.target.data);
xml_dokument.ignoreWhitespace = true
;
for (var i:int = 0; i < xml_dokument.karte.length(); i++) {
//
var karte = new Object();
karte.dateiname=xml_dokument.karte[i].dateiname.text();
karte.dateityp=xml_dokument.karte[i].dateityp.text();
karte.beschreibung=xml_dokument.karte[i].beschreibung.text();
karte.datum=xml_dokument.karte[i].datum.text();
karte.aktiv=xml_dokument.karte[i].aktiv.text();
bilder[bilder.length]=karte;
preloader(i,bilder[i].dateiname,xml_dokument.karte.length());
}
}
}
public function preloader(nr:int,dateiname:String,numberOfImg:int) {
var preloaderX:Array=[0,11,15,11,0,-11,-15,-11];
var preloaderY:Array=[-15,-11,0,11,15,11,0,-11];
var circle:Array = new Array();
var tweens:Array = new Array();
var preLoader_co:Sprite = new Sprite();
var thumbnail_co:MovieClip = new MovieClip
var beginnTimer:Timer=new Timer(75,0);
var load_img:Loader = new Loader();
var url:URLRequest=new URLRequest("grusskarten/"+dateiname);
var progressTextField:TextField = new TextField();
var progressTextFormat:TextFormat = new TextFormat();
var progressText:String="0%";
for (var i:int = 1; i<=preloaderX.length; i++) {
circle[i] = new circle_mc();
circle[i].x=preloaderX[i-1];
circle[i].y=preloaderY[i-1];
circle[i].height=0;
circle[i].width=0;
circle[i].name="circle"+i;
preLoader_co.addChild(circle[i]);
}
//
preLoader_co.x=thumbnailX[nr]+(thumbnailW/2);
preLoader_co.y=thumbnailY[nr]+(thumbnailH/2);
preLoader_co.name="thumbnail"+nr;
addChild(preLoader_co);
//
load_img.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadThumbnailProgress);
load_img.contentLoaderInfo.addEventListener(Event.COMPLETE, loadThumbnailComplete);
load_img.addEventListener(MouseEvent.CLICK, thumbnailClick);
load_img.load(url);
addChild(load_img);
//
function loadThumbnailProgress(evt:ProgressEvent) {
progressText = ""+Math.round((evt.bytesLoaded/evt.bytesTotal)*100);
progressTextField.text=progressText;
progressTextField.x = (thumbnailX[nr]+(thumbnailW/2))-10;
progressTextField.y = (thumbnailY[nr]+(thumbnailH/2))-10;
progressTextField.mouseEnabled=false;
progressTextField.selectable=false;
progressTextFormat.font="Arial";
progressTextFormat.size=12;
progressTextFormat.color=0xFF0000;
progressTextField.setTextFormat(progressTextFormat);
addChild(progressTextField);
}
function loadThumbnailComplete() {
load_img.width=thumbnailW;
load_img.height=thumbnailH;
load_img.x=thumbnailX[nr];
load_img.y=thumbnailY[nr]+26;
load_img.name="thumbnail_img"+nr;
//trace(thumbnailY[nr])
//trace(getChildIndex(load_img))
removeChild(preLoader_co);
removeChild(progressTextField);
beginnTimer.stop();
//
}
function thumbnailClick(evt:MouseEvent){
/*trace(evt.type)
trace(evt.target.name)
trace(evt.currentTarget.name)
trace(nr)*/
trace(load_img.y)
Tweener.addTween(load_img,{height:400, width:600, alpha:1, time:2, transition:"Strong"});
for(i=0;i<=numberOfImg-1;i++){
if(i!=nr){
trace(getChildByName("thumbnail_img"+i).name)
getChildByName("thumbnail_img"+i).removeEventListener(MouseEvent.CLICK, thumbnailClick)
getChildByName("thumbnail_img"+i).alpha = .1
Tweener.addTween(getChildByName("thumbnail_img"+i),{height:thumbnailH, width:thumbnailW, time:2, transition:"Strong"});
}
}
}
//
var a:int=0;
beginnTimer.addEventListener("timer", beginnPreloader);
beginnTimer.start();
//
function beginnPreloader() {
if (a==0) {
a=1;
}
circle[a].height=10;
circle[a].width=10;
Tweener.addTween(circle[a],{height:2, width:2, time:2, transition:"Strong"});
a++;
if (a==9) {
a=1;
}
}
}
}
}
|
vielen dank!!! | | | Beiträge: 20 Registriert: Sep 2006
| 01.03.2011, 17:04
Leg doch einfach ein MovieClip über die nicht angezeigten Elemente drüber, wenn du ein Bild vergrößerst. Der MC sollte Stage-Breite und -Höhe haben und mit der HG gefüllt sein. Wenn du als Füllfarbe Schwarz nimmst mit 80% Deckkraft sieht man die Thumbnails auch noch durch, kann sie aber meiner Meinung nach nicht anklicken.
Andere Möglichkeit:
Alle Thumbnails in ein Array und dann über dieses eine For-Schleife machen, jedoch musst du hier nach Verlassen des Vollbildmodus wieder alle EventListener hinzufügen. Erscheint mir als unnötig, wenn die Variante von oben funktionieren sollte.
- Stefan | Geändert von aprik0 am 01.03.11 um 17:07 Uhr | |
| | Beiträge: 1776 Wohnort: Laimbach 6 1/2 Registriert: Nov 2002
| 01.03.2011, 19:48
|
|