Volledige versie bekijken : Actieve knop meegeven
martin633
%Europe/Berlin %377 %2007, 09:03
Goedemorgen allemaal!
Ik ben met een website bezig (php) met daarin een flash-menu. Alles werkt zoals ik wil, alleen weet ik niet hoe ik een knop op actief kan zetten. (Dus dat hij bv dikgedrukt is als ik op de desbetreffende pagina ben). Ik wil zonder frames werken, dus het probleem is dus dat als ik op een links klink, het flash-menu weer ververst.
Hoe moet ik dit oplossen (als er een oplossing voor is). Ik zat zelf te denken aan de desbetreffende pagina-id op te halen (die in de url zal komen te staan). Maar weet niet zo goed hoe ik dit moet doen in flash en of dit wel mogelijk is.
Ik hoop dat iemand een oplossing heeft. In ieder geval vast bedankt.
Groeten,
Martin
ps
ik heb wel iets gevonden op het forum, maar als ik de .fla download, kan ik niks vinden wat me verder helpt. Volgens mij is daar het probleem opgelost dmv een frame...
http://www.flashfocus.nl/forum/showthread.php?t=12481&highlight=actief+menu
mknol
%Europe/Berlin %384 %2007, 09:13
Plaats dit in je head, of maak er een .js file van.
<script type="text/javascript">
// Script gemaakt door Mark Knol
// Dit script voegt een class ('aktief') toe aan links waarvan de inhoud overeenkomt met URL.
function ClassAanAktieveLinkToewijzen(divID) {
var DHTML = (document.getElementById || document.all || document.layers); // DHTML check
if ( !DHTML ) alert('Uw browser ondersteund geen DHTML');
if (document.getElementById) { // check op browser-functies
var Obj = document.getElementById(divID);
} else if (document.all) {
var Obj = document.all[divID];
} else if (document.layers) {
var Obj = document.layers[divID];
}
var URL = window.location.href; // URL van pagina
var inhoud = Obj.getElementsByTagName("a"); // vind links in divID
if (inhoud.length != 0) { // als er inhoud in zit,
for(i=0; i<inhoud.length; i++) { // maak een loop met alle links
if (URL.indexOf(inhoud[i].href) > -1) { // check of inhoud van link overeenkomt met URL
inhoud[i].className ="aktief"; // Class toewijzen
}
if (URL.indexOf("index") > -1 && inhoud[i].innerHTML.toLowerCase() =="home") { // extra - als je home gebruikt op index-pagina
inhoud[i].className ="aktief"; // Class toewijzen
}
}
}
}
</script>
Dit script zoekt naar de link die actief is en geeft deze een class "aktief".
Deze kun je stylen in je CSS:
a.aktief {
color:#f00;
}
Om de functie aan te roepen, kun je dit bijvoorbeeld gebruiken
<script type="text/javascript">
window.onload = function() {
ClassAanAktieveLinkToewijzen('menu')
}
</script>
zoals je ziet gebruik ik menu als ID. Dat id moet overeenkomen met het id van het element waar je links instaan.
voorbeeld:
<div id="menu">
<a href="index.html">test</a>
<a href="test.html">test</a>
<a href="contact.html">test</a>
</div>
Ik hoop dat je hiermee uitkomt.
Laiverd
%Europe/Berlin %387 %2007, 09:17
't Is natuurlijk nog vroeg, maar bovenstaande gaat echt niet werken met een Flash menu. Wat je nodig hebt zijn querystrings: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_14253 en/of http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_16417
John
martin633
%Europe/Berlin %393 %2007, 09:26
Ja inderdaad. Ik waardeer je lange reply mknol, maar dit heeft niet echt betrekking op mijn probleem. Eens kijken of de links van Laiverd me verder kunnen helpen. THNX!
martin633
%Europe/Berlin %489 %2007, 11:44
Ik ben bang dat ik hier niet veel van ga snappen... Heeft er misschien iemand een voor mij wat begrijpelijkere oplossing?
Laiverd
%Europe/Berlin %522 %2007, 12:31
Dit is gewoon de oplossing: je geeft via een querysting een waarde door in de url , bv. www.jouwsite.nl?plop=plup
En in je swf aanroep geef je die door met
...
src=jouw.swf?plop=<?php echo $_GET['plop'] ?>
...Op dat moment heb je de waarde plup (van de variabele plop) direct beschikbaar op de hoofdtijdlijn van je movie en kun je er dus mee doen wat je maar wilt.
John
mknol
%Europe/Berlin %565 %2007, 13:34
ah ik had er overheen gelezen dat het over flash ging... sorry
martin633
%Europe/Berlin %590 %2007, 14:09
Dus als ik het goed begrijp kan je vanuit flash niet direct ietst uit de adresbalk halen... Maar als ik de swf oproep, kan ik wel dingen meegeven. Ik heb nu dus:
INDEX.PHP
src="menu.swf?active=<?php echo $_GET['pag'] ?>"
FLASH MENU
//WELKE LINK MOET ACTIEF ZIJN?
active = .....
active.gotoAndPlay("active");
Hoe moet ik nu die waarde oproepen?
Laiverd
%Europe/Berlin %642 %2007, 15:25
gotoAndPlay(active);
Ten minste als alles klopt wat je daaromheen hebt gedaan, en het verschil weet in de notatie van een variabelenaam en van een string (waarde).
John
martin633
%Europe/Berlin %648 %2007, 15:34
active.gotoAndPlay("active");
die laatste "active" is de naam van een frame. Ik wil dus dat hij bij de eerste active de $_GET['pag'] invult.
Laiverd
%Europe/Berlin %695 %2007, 16:41
dan is active dus de instance name van een movieclip ????
In dat geval wordt het
this[active].gotoAndPlay("active");
John
martin633
%Europe/Berlin %601 %2007, 14:26
inderdaad.. er staan in het menu een aantal buttons (eigenlijk mc's). deze hebben allemaal dezelfde instance-naam als de "pag" waar ze naartoe verwijzen. Dus als ik op CONTACT klik, ga ik naar index.php?pag=contact.
Daarom wil ik dus dat dat flash-menu als hij wordt aangeroepen kijkt wat de PAG van dat moment is. In dit geval dus contact. Ik zal dus willen dat het op dat moment wordt:
contact.gotoAndPlay("active");
ik heb nu dus in mn eerste frame gelijk dit staan:
this[active].gotoAndPlay("active");
in de broncode zie ik trouwens dat het klopt (src="menu.swf?active=contact), dus dat zit goed.
Hij doet het alleen nog niet, dus flash doet niets met dat stukje AS.
Maar het hoort dus te werken als je een swf aanroept met ?blaat=blub. Als je dan in je AS praat over [blaat], ziet hij dat het blub is??? Of mis ik gewoon een stukje AS?
Sorrie voor mijn vragen :P
Laiverd
%Europe/Berlin %619 %2007, 14:52
Zet anders alles (php, fla) online in een zip; kijk ik er wel even naar. Wat je zelf daarvoor nog even kunt doen:
- check of de movieclip bestaat met trace(contact);// mag niet undefined opleveren
trace(this[active]) // moet hetzelfde opleveren als de trace hiervoor
- zorg ervoor dat al je actionscript op de bovenste layer staat
- Kan goed zijn dat je toch met een timing probleem te maken hebt. Zet een extra scene voor je huidige scene met maar 1 frame, en zet een stop() op het frame waar je nu je actionscript hebt staan.
John
martin633
%Europe/Berlin %656 %2007, 15:45
trace(contact); <-- Geeft: _level0.contact
trace(this[active]); <-- undefined
maar is dat dat niet logisch omdat ik in flash dat menu niet open via de site, en dus geen ACTIVE mee krijg.
Die AS staat helemaal bovenaan. Ik zal even wat code plakken:
<div id="menu">
<script type="text/javascript">
AC_FL_RunContent( 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0','width','260','heigh t','500','src','menu','quality','high','pluginspag e','http://www.macromedia.com/go/getflashplayer','movie','menu' ); //end AC code
</script><noscript><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="260" height="500">
<param name="movie" value="menu.swf" />
<param name="quality" value="high" />
<embed src="menu.swf?active=<?php echo $_GET['pag'] ?>" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="260" height="500"></embed>
</object></noscript>
</div> <!-- EINDE MENU -->
Zoals ik dus al zei: Dat stukje PHP werkt gewoon.. in de broncode zie ik dat hij ACTIVE=CONTACT meegeeft...
Flash wil alleen die waarde niet ophalen :( Is het echt voldoende om het op te halen met: this[active]...?
stop();
//HIDDEN LOGIN-BUTTON
login.onRelease = function() {
getURL ("index.php?pag=login","_parent","POST");
}
//WELKE LINK MOET ACTIEF ZIJN?
this[active].gotoAndPlay("active");
contact.onRollOver = function() {
contact.gotoAndPlay("over");
logoplaatje.gotoAndPlay("contact");
}
contact.onRollOut = function() {
contact.gotoAndPlay("out");
logoplaatje.gotoAndPlay("start");
}
contact.onRelease = function() {
getURL ("index.php?pag=contact","_parent","POST");
}
Ik zal zo nog proberen om er een losse scene voor te zetten...
Laiverd
%Europe/Berlin %673 %2007, 16:09
Ja da's waar natuurlijk dat die tweede trace undefined geeft. Anders moet je even ergens een textfield ergens neerzetten en
textfield_name.text = this[active] en dan in de browser testen of er output in komt.
Volgens mij moet this[active] voldoende zijn, mits dat statement op dezelfde tijdlijn staat als de variabele 'active' (in dit geval dus op _root). Als je je statement bv. in een movieclip op de _root hebt dan wordt het this[_parent.active] omdat je dan even een tijdlijn omhoog moet om 'm op te halen.
Overigens ga je volgens mij nog wel tegen iets aanlopen in je rollout statements; want je wilt natuurlijk dat de active button on rollout ook weer naar de active state toegaat, maar da's van later zorg.
John
martin633
%Europe/Berlin %689 %2007, 16:32
Alles staat op dezelfde tijdlijn. Gewoon movieclips met namen die ik dus aanroep vanaf mijn actions-layer. Dat tekstveldje zegt ook UNDEFINED vanaf mijn browser, dus hij krijgt ACTIVE op de een of andere manier niet goed mee :(
Laiverd
%Europe/Berlin %783 %2007, 18:48
Zet je files maar even in een zip ergens neer; kijk ik er z.s.m. even naar. S.v.p. wel alleen het allernoodzakelijkste, zodat ik niet door bergen code heen hoef ;)
John
martin633
%Europe/Berlin %666 %2007, 15:59
ok, heb even snel een voorbeeldje gemaakt. Hij is te downloaden op
www.martinvdberg.nl/flashmenu.rar
Vast bedankt voor de moeite!
Laiverd
%Europe/Berlin %814 %2007, 19:33
Nou het is opgelost. Wist niet dat je een van de javascript oplossingen gebruikt om je movie te tonen, en daar wordt het net iets anders van. Soms is alles info belangrijk ;)Je hebt nl. wel leuk de <?php echo $_GET['pag']; ?> in de noscript tag meegegeven (overigens moet je dat ook nog even even bij de OBJECT tag doen en niet alleen bij de EMBED tag.
Probleem is alleen dat de noscript tag bedoeld is voor browsers waarin javascript is uitgeschakeld.
In veruit de meeste gevallen is dat niet zo, en wordt dus gewoon het javascript gelezen, maar je variabele nooit doorgegeven. Je moet dus op een of andere manier die variabele vanuit php doorgeven aan het javascript dat je movie op het scherm zet. Simpel, ware het niet dat de Macromedia oplossing met javascript, niet echt ruimte biedt om een querystring direct achter de url van de swf te plakken (GRRRRRRRRRRRRRRR ... :@ ), omdat vanuit het script de .swf extensie erachter wordt geplakt.
Er is gelukkig echter ook een andere oplossing om variabelen vanuit de html door te geven aan Flash; nl. FlashVars (even opzoeken in de handleiding). En daarmee lukt het wel met behoud van het bestaande javascript. Je moet alleen de parameter FlashVars en diens waarde meegeven aan je javascript aanroep.
Hieronder de HTML zoals ie moet worden en waarmee het werkt.
<script type="text/javascript">
AC_FL_RunContent( 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0','width','300','heigh t','300','src','menu','FlashVars','active=<?php echo $_GET['pag']; ?>','quality','high','pluginspage','http://www.macromedia.com/go/getflashplayer','movie','menu' );
</script>
<noscript>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="300" height="300">
<param name="movie" value="menu.swf?active=<?php echo $_GET['pag']; ?>" />
<param name="quality" value="high" />
<embed src="menu.swf?active=<?php echo $_GET['pag']; ?>" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="260" height="500"></embed>
</object>
</noscript>
Hoe dan ook ... het is zo gefixed.
martin633
%Europe/Berlin %842 %2007, 20:13
Helemaal top! Ik ga nu mijn verjaardag vieren en daarna zo snel mogelijk uitproberen. Bedankt voor je hulp!
Laiverd
%Europe/Berlin %848 %2007, 20:22
Gefeliciteerd ;)
martin633
%Europe/Berlin %693 %2007, 16:38
Ok hij werkt inderdaad! Goede uitleg! En heb ook al opgelost dat die mouse-over/out er niet meer is als hij actief is...
Laiverd
%Europe/Berlin %750 %2007, 18:00
Mooi zo. Succes met de rest.
John
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.