2010-04-19 7 views
2

Situation/configuration idéale: Une page contenant 1 animation Flash et une div séparée contenant quelques hyperliens. Ces liens ont un nom de classe unique comme ceci: Copiez le codeContrôle Javascript> CSS à travers Flash

<ul> 
    <li><a href="" class="randomname1"></a></li> 
    <li><a href="" class="randomname2"></a></li> 
    <li><a href="" class="randomname3"></a></li> 
    <li><a href="" class="randomname4"></a></li> 
    </ul> 

Le film Flash lui-même contiendra 4 boutons. En cliquant sur l'un de ces boutons, le Flash doit communiquer avec Jquery/JS et lui indiquer de mettre en évidence le nom de classe spécifique.

Idées jusqu'à

Pour le javascript, il ressemblerait

$(function() { 
function setClass(className) {$("."+className).css("background","red");} 
}); 

Et dans les images clés spécifiques dans Flash

1. button 1 
    ExternalInterface.call("setClass","randomname1"); 

    1. button 2 
    ExternalInterface.call("setClass","randomname2"); 

    1. button 3 
    ExternalInterface.call("setClass","randomname3"); 

    1. button 4 
    ExternalInterface.call("setClass","randomname4"); 

Le problème est que ne fonctionne pas vraiment bien et je suis Je ne sais pas si je fais que Flash communique correctement avec JS.

Des idées ou des conseils pour me diriger dans la bonne direction à nouveau? Nous vous remercions à l'avance

J.

+1

Bienvenue chez SO. Qu'est-ce qui ne fonctionne pas bien? Avez-vous essayé 'backgroundColor' au lieu de' background'? Une raison spécifique pour laquelle vous enveloppez la fonction 'setClass' dans' $() '? –

+0

Merci Pekka pour la réponse. Ce qui ne fonctionne pas, c'est qu'il ne fait rien quand je vais dans les cadres spécifiques dans Flash. J'ai aussi changé le backgroundColor mais toujours rien. Il n'y a pas de raison particulière d'enrouler setClass dans $(), donc je l'ai enlevé et testé à nouveau sans résultat. Je pourrais rendre les fichiers/html disponibles si nécessaire? –

Répondre

0

La méthode setClass ne sera pas visible au code flash - comme la méthode est encapsulé à l'intérieur de la fermeture $(document).ready()

(Dans le cas où vous vous demandez, votre $(function()... appel est tout simplement un raccourci à $(document).ready(function()...)

Vous besoin de joindre la méthode à l'objet fenêtre ou un autre objet globalement accessible pour le flash pour le voir. Quelque chose comme:

$(function() { 
    window.setClass = function(className) {$("."+className).css("background","red");} 
}); 

qui est l'approche la plus simple.

... ou pour arrêter la pollution de l'espace de noms fenêtre:

$(function() { 
    var ns = window.myNamespace = {}; 
    ns.setClass = function(className) {$("."+className).css("background","red");} 
}); 

.... puis en Flash:

ExternalInterface.call("myNamespace.setClass","randomname1"); 

.... Il est à noter cependant que je ne connais pas assez avec flash pour savoir si le second exemple fonctionnera.

+0

Merci Graza pour l'explication. J'ai essayé les suggestions et j'ai le sentiment que je ne fais pas quelque chose correctement. J'ai fait le fichier de base ici http://www.mediafire.com/?yigmfed0mig Espérons que le problème est très simple –

+0

:) Ce fichier/site semble être « privé ». Vous pourriez vouloir changer cela car le lien ne fonctionne pas - puis le tester dans un navigateur différent pour vous assurer que vous pouvez y accéder lorsque vous n'êtes pas connecté (auquel cas les autres pourront le voir). Je ne suis pas sûr que * I * pourrait être beaucoup plus d'aide - comme mentionné, je ne suis pas familier avec Flash, mais j'espère que quelqu'un d'autre peut vous aider ... – Graza

+0

Hi Graza, Le lien devrait être disponible dès maintenant - http://www.mediafire.com/?yigmfed0mig Si vous pouvez jeter un oeil à la JS et html, ce serait déjà génial car je pense que le problème est plus dans le JS lui-même? –

0

Avez-vous testé pour la disponibilité ExternalInterface avec ExternalInterface.available?