Volledige versie bekijken : toggle menu (Mouse out )
lucre123
%Europe/Berlin %569 %2009, 14:39
Hallo,
Ik ben een soort togglemenu (http://www.studioberenschot.nl/schetsen/toggle_menu.swf) aan het maken. De hover is al gelukt.
Ik wil alleen als de muis naar andere button gaat het venster weer inklapt
(Mouse_out?). Dit gebeurt bij frame 10 van movieclip 'togglescreen1' of 'togglescreen2' .
Wie kan me helpen? Avast hartelijk dank, ik kom er niet uit :(
Bijgaand As3, tot zover:
_______________________________________
function toggleContent1(event:MouseEvent) {
if (togglescreen1.currentFrame == 1) {
togglescreen1.gotoAndPlay(2);
} else {
togglescreen1.gotoAndPlay(10);
}
}
function toggleContent2(event:MouseEvent) {
if (togglescreen2.currentFrame == 1) {
togglescreen2.gotoAndPlay(2);
} else {
togglescreen2.gotoAndPlay(10);
}
}
toggle_btn1.addEventListener(MouseEvent.MOUSE_OVER ,toggleContent1);
toggle_btn2.addEventListener(MouseEvent.MOUSE_OVER ,toggleContent2);
_____________________________________
Groet,
Nathan
Sjoedzj
%Europe/Berlin %679 %2009, 17:18
Ik zou in je toggle-methode controleren of er een andere screen open is , zo ja, die eerst dichtklappen en die andere openen.
lucre123
%Europe/Berlin %694 %2009, 17:39
Ik zou in je toggle-methode controleren of er een andere screen open is , zo ja, die eerst dichtklappen en die andere openen.
Sorry, ik begrijp je niet helemaal (maar ik ben ook nog maar een beginner...), er is geen ander screen open, tenzij geactiveerd via button 'MOUSE_OVER'? Ik moet toch iets in AS wijzigen, zodra ik over button ga (hover), start de movieclip. zodra ik deze button weer verlaat, behoort of moet de movieclip weer verder gaan op frame 10 (venster sluiten). Deze staat nu op 'stop', bij button opnieuw hoveren verdwijnt deze pas weer. Dit laatste wil ik wijzigen, dus waarneer je met de muis over button gaat opent venster, bij verlaten vd button, sluit venster weer.
In ieder geval bedankt voor je reactie!
Zie link hier (http://www.studioberenschot.nl/schetsen/toggle_menu.swf)
CremFresh
%Europe/Berlin %772 %2009, 19:32
Je kan het oplossen met een handler. Scheelt je overhead aan code.
var active:MovieClip
var old:MovieClip
function togglContent(e:MouseEvent):Void{
if(old){
old.gotoAndPlay(10);
}
active = e.target;
active.gotoAndPlay(2);
old = active
}
toggle_btn1.addEventListener(MouseEvent.MOUSE_OVER ,togglContent);
toggle_btn2.addEventListener(MouseEvent.MOUSE_OVER ,togglContent);
Sjoedzj
%Europe/Berlin %346 %2009, 09:18
Dit is wat ik bedoelde, Op het moment dat je over een andere button beweegt, controleer je of er een ander scherm open staat (in de if-statement) en laat je de vorige movieclip sluiten. vervolgens open je de movieclip waar je net overheen beweegt (e.target).
lucre123
%Europe/Berlin %392 %2009, 10:25
Bedankt Cremfresh voor de tip, lijkt veel beter! Maar het werkt nog niet helemaal goed...
Zie voorbeeld (http://www.studioberenschot.nl/schetsen/toggle_menu2.swf). Op één of andere manier koppelt hij niet de movieclips aan de buttons? En krijg deze error-melding: 1046: Type was not found or was not a compile-time constant: Void.
??
Nathan
edit; Ik zie nu je reactie Sjoedz, maar wellicht moet ik nu mijn 'MovieClip' anders benoemen? Voorheen togglescreen1,... etc ??
Hopelijk ben ik er zo sneller uit...
Alvast bedankt!
jaspermuts
%Europe/Berlin %472 %2009, 12:19
De reden dat hij doorspeelt is denk ik ook omdat er een error is.. Dan stop Flash (of de compiler, voor de preciezen onder ons) met interpreteren van je code.
Maareh..Een melding die zegt dat type 'Void' gevonden kan worden is toch vrij duidelijk? Dan bestaat Void dus niet. En dat komt omdat het in AS3 'void' is.
lucre123
%Europe/Berlin %540 %2009, 13:58
Ik heb het gewijzigd, nu andere foutmelding (1118: Implicit coercion of a value with static type Object to a possibly unrelated type flash.display:MovieClip.). Toch moeilijker dan ik dacht...
Hieronder code:
var active:MovieClip
var old:MovieClip
function toggleContent(e:MouseEvent):void{
if(old){
old.gotoAndPlay(10);
}
active = e.target;
active.gotoAndPlay(2);
old = active
}
toggle_btn1.addEventListener(MouseEvent.MOUSE_OVER ,toggleContent);
toggle_btn2.addEventListener(MouseEvent.MOUSE_OVER ,toggleContent);
Sjoedzj
%Europe/Berlin %542 %2009, 14:01
verander deze regel eens: active = e.target as MovieClip
CremFresh
%Europe/Berlin %543 %2009, 14:02
HEhe ja mij bad ben bezig met AS2 opdracht komt wellis in de war met Void en void ;)
lucre123
%Europe/Berlin %579 %2009, 14:55
verander deze regel eens: active = e.target as MovieClip
Dan krijg ik vervolgens deze foutmelding:
Error #1009: Cannot access a property or method of a null object reference.
Sjoedzj
%Europe/Berlin %604 %2009, 15:30
Misschien kun je de debugger even erbij pakken en controleren wat je binnenkrijgt bij je ResultEvent
lucre123
%Europe/Berlin %613 %2009, 15:43
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at toggle_menu.fla::MainTimeline/toggleContent()[toggle_menu.fla.MainTimeline::frame1:12]
Sjoedzj
%Europe/Berlin %617 %2009, 15:48
Ik bedoel dat je je project moet debuggen. Dit kan met de trace() methode (zie de allereerste post van dit as3 forum).
lucre123
%Europe/Berlin %649 %2009, 16:35
Ik bedoel dat je je project moet debuggen. Dit kan met de trace() methode (zie de allereerste post van dit as3 forum).
Oke, ik ben bang dat dat een stap te ver is voor mij, maar ga het proberen, ik had gehoopt dat het eenvoudiger was, thx anyway!
Sjoedzj
%Europe/Berlin %662 %2009, 16:54
Debuggen is niet zo ingewikkeld, je zit nu tegen een soort blackbox aan te kijken en ik kan vanaf hier niet zien wat er precies null is.
function toggleContent(e:MouseEvent):void{
if(old){
old.gotoAndPlay(10);
}
trace(e);
active = e.target;
active.gotoAndPlay(2);
old = active
}
In je console kun je dan de output zien van die trace.
En zo kun je gaan kijken welke informatie je precies binnenkrijgt.
kijk voor meer dus hier:
http://www.flashfocus.nl/forum/showthread.php?t=38364
lucre123
%Europe/Berlin %863 %2009, 21:42
Ik heb weer even wat zitten stoeien, had het bijna opgegeven. Maar wellicht is het nu wel gelukt, nu? :). Jouw trace string toegevoegd. Kreeg het volgende:
[MouseEvent type="mouseOver" bubbles=true cancelable=false eventPhase=2 localX=108 localY=0 stageX=111 stageY=5 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0]
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at toggle_menu.fla::MainTimeline/toggleContent()
Kun je hier wat mee? Alvast bedankt voor je tijd!
Nathan
lucre123
%Europe/Berlin %373 %2009, 09:58
Lukt iemand me nog om te helpen, volgens mij ben ik er bijna?!
Nathan
e.l.dam
%Europe/Berlin %606 %2009, 15:33
You've got mail.
lucre123
%Europe/Berlin %317 %2009, 08:37
You've got mail.
Helemaal top! Probleem is opgelost. Jullie allen bedankt voor tijd en moeite, ook Sjoedz! Dat tracen ga ik hopelijk no wel leren, nu nog een stapje te ver :D.
Nathan
Midas
%Europe/Berlin %882 %2009, 22:11
Zou je met ons kunnen delen hoe je het nu hebt opgelost? :)
lucre123
%Europe/Berlin %456 %2009, 11:56
Zou je met ons kunnen delen hoe je het nu hebt opgelost? :)
Sorry, uiteraard! Mijn eigen code was wat beroerd...
De 'void expressie' als handler was een goed advies/basis.
Alleen het werkte nog niet helemaal...
Het tracen lukt me helaas (nog) niet.
Met dank aan Edam is de code verbeterd/herschreven.
Tevens Mouse_out toegevoegd, zodat movieclip stopt, bij verlaten button
en vensters weer gesloten wordt.
Onderstaande code is wat uitgebreider maar volgens mij ook overzichtelijk en stapsgewijs. Op deze manier kan je ook gemakkleijk buttons dupliceren en nieuwe of andere specifieke movieclips toekennen aan de juiste button.
De code is nu als volgt:
function toggleContentOn(e:MouseEvent):void
{
switch (e.target.name) {
case "toggle_btn1" :
togglescreen1.gotoAndPlay(2);
break;
case "toggle_btn2" :
togglescreen2.gotoAndPlay(2);
break;
default :
break;
}
}
function toggleContentOff(e:MouseEvent):void
{
switch (e.target.name) {
case "toggle_btn1" :
togglescreen1.gotoAndPlay(10);
break;
case "toggle_btn2" :
togglescreen2.gotoAndPlay(10);
break;
default :
break;
}
}
toggle_btn1.addEventListener(MouseEvent.MOUSE_OVER ,toggleContentOn);
toggle_btn2.addEventListener(MouseEvent.MOUSE_OVER ,toggleContentOn);
toggle_btn1.addEventListener(MouseEvent.MOUSE_OUT ,toggleContentOff);
toggle_btn2.addEventListener(MouseEvent.MOUSE_OUT ,toggleContentOff);
nuvorm
%Europe/Berlin %555 %2009, 14:20
ik vervang vaak zelf een mouse out voor een object door een mouseover listener op de stage.
Weet niet of dat hier van belang is.
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.