PDA

Volledige versie bekijken : ExternalInterface & display none probleem


theFlashWizard
%Europe/Berlin %495 %2007, 12:53
Beste webdevelopers,
Ik probeer een soort tooltip met flash te maken voor op een html pagina.
Deze moet met een fade-in zichtbaar worden wanneer je over een link gaat en ook weer uit-faden wanneer je er vanaf gaat.
Hiervoor had ik dus communicatie nodig tussen flash en javascript. Hiervoor ben ik voor het eerst gaan werken met de ExternalInterface class.

Dit lukt allemaal prima. Nu wil ik wil alleen, om cpu te besparen, de div waar de swf inzit verbergen na een fadeout. Alleen wanneer ik de stijl van de div een display = "none" meegeef kan ik de swf niet meer aanspreken met de ExternalInterface. Volgens mij geld dit ook wanneer de div zich buiten beeld bevind (hoger bijv).

Dus, hoe kan ik dit oplossen en/of kan ik dit wel oplossen?

Ik heb een klein voorbeeld proberen te maken. Je zal het probleem kunnen zien wanneer je in test.js de stukjes die de div verbergen niet langer als commentaar neerzet.

Alvast bedankt!

Lorrens
%Europe/Berlin %501 %2007, 13:02
En visibility: hidden.. helpt dat niet?

theFlashWizard
%Europe/Berlin %507 %2007, 13:10
Oe, dat werkt beter. thnx :)
Alleen is dan het vreemde is dan dat het alleen werkt wanneer ik er een iritante alert() voor laat staan :S
(Bekijk het nieuwe voorbeeld maar)

Lorrens
%Europe/Berlin %516 %2007, 13:24
Hij doet het bij mij in Firefox en IE7 heel raar..
In FF is het flash dingetje er sowieso niet, en in IE zie je hem eventjes, tot je de alert weg klikt.

Heb die alert eens weggehaald, en dan is hij in FF als in IE niet zichtbaar.. heb je niet een knopje die hem weer zichtbaar maakt?
kan je veel makkelijker testen :)

theFlashWizard
%Europe/Berlin %532 %2007, 13:46
Damn... ik zie er geen logica meer in :|
Alleen als ik een alert uitvoer voordat ik de div hidden maak kan hij de swf terug vinden. Ander krijg je errors dat hij de show/hide functies niet terug kan vinden.
Dit probleem geld niet voor de hideBanner functie die ik uitvoer bij een onMouseOut.

BernardV
%Europe/Berlin %855 %2007, 21:31
Ik heb even wat getest en kwam tot de conclusie dat als je een div hidden zet en weer visible dat de SWF opnieuw geinitialiseerd wordt. Zet eens een callback in je swf code die bij het laden gedraait wordt (bijvoorbeeld een alert) dan zie je wel wat ik bedoel.

theFlashWizard
%Europe/Berlin %017 %2007, 01:25
Je hebt inderdaad gelijk Bernard :|
Ow wacht, nee dit klopt niet wanneer ik alles in 1 frame doe (tween met as).

Ook heb ik ontdekt dat als ik de div buiten beeld zet (alternatieve verstop optie dacht ik) ik de swf ook niet kan aanspreken.

Als ik de div in het begin verberg en na mouseover visible maak, dan kan ik de show functie in de swf nog niet aanspreken. Maar daarna zie ik wel dat de trace die ik in het begin van het document zet uitgevoerd wordt (wat aangeeft dat hij geïnitialiseerd wordt, zoals bernard aangaf).
Daarna kan ik de swf wel aanspreken. Na het opnieuw hidden kan ik de functie zonder problemen blijven aanspreken en kan ik de div ook weer gewoon zichtbaar maken.

Conclusie lijkt dus dat de div in het begin niet geïnitialiseerd lijkt te worden omdat ik hem op hidden zet. Vervolgens wordt hij pas geïnitialiseerd na een mouseover, maar daar zit waarschijnlijk een kleine vertraging bij waardoor je nog niet meteen functies kan aanspreken.

Ow, het buiten beeld zetten na maken van swf geeft zelfde effect als meteen op hidden zetten.

De oplossing zit hem dus in ergens een vertraging inbouwen. Alleen zie ik het nut er niet helemaal meer van als ik ervoor zorg dat de swf zichzelf met een tween verbergt.

BernardV
%Europe/Berlin %368 %2007, 09:51
Wat je zou kunnen doen is vanuit de swf een javascript functie aanroepen die de div op hidden zet.