2008-09-17 4 views

Répondre

12

Celui-ci m'a intriguée. Je sais que jessegavin a posté du code pendant que je suis allé le découvrir, mais celui-ci est testé. J'ai un exemple de travail super simple qui vous permet de faire glisser vers et depuis le flash. C'est assez brouillon quand je l'ai jeté ensemble pendant ma pause déjeuner.

Voici le demo

Et le source

La classe de base est prise directement à partir du External Interface LiveDocs. J'ai ajouté MyButton pour que le bouton puisse contenir du texte. La majorité du javascript provient du même exemple LiveDocs.Je l'ai compilé en utilisant mxmlc

+0

Merci beaucoup, je suppose que cela prouve mal les autres réponses en disant que ce n'est pas possible! – BoD

+0

Way to go enobrev! C'est vraiment lisse. – jessegavin

+0

Merci monsieur. C'est un peu bogué, mais une preuve de concept pas moins. – enobrev

0

Si le site entier est un gros fichier flash intégré alors oui c'est possible.

Je ne pense pas que vous pouvez acheive toute autre manière

1

Je dirais qu'il est possible de déposer - flash si vous constatez que l'élément est traîné sur le contenant la substance flash, et vous définissez vos objets traînés pour avoir un index z plus élevé que le flash. Puis, quand il est tombé, vous pouvez parler à Flash en utilisant javascript pour lui dire où et ce qui a été abandonné.

Cependant, l'inverse est probablement beaucoup plus difficile, car vous devez détecter quand l'objet frappe la bordure du film flash et le "passer" au gestionnaire javascript (créez-le dans le HTML, cachez-le dans flash).

La question est probablement de savoir si cela en vaut la peine, ou si vous pouvez peut-être réaliser tout en JS ou en Flash?

+0

Donc je suppose que la réponse est: c'est peut-être possible mais il n'y a pas d'API connue ou autre pour le faire de façon standard – BoD

0

Non possible en flash - à moins que vous ne souhaitiez faire glisser vers une cible dans la même application Flash.

pourrait probablement être fait avec une applet Java signée (mais qui veut aller dans cette voie?)

1

Attendez, le point d'encapsulation est valide, mais le flash peut exécuter des fonctions JS, et Seldaek est juste que un élément HTML avec un z-index plus élevé devrait flotter sur le film flash. Donc, si vous avez fait tout le traitement de glisser dans JS et que le flash lisait ses propres dimensions et la position du pointeur dans l'application, il pourrait signaler les méthodes JS qui esclave (s) au pointeur même (surtout) lorsque le pointeur quitte le limites de l'application flash. Ce serait bien poilu.

3

DISCLAIMER Je n'ai pas testé ce code du tout, mais l'idée devrait fonctionner. En outre, cela ne gère que le glisser à un film flash.

Voici un code ActionScript 3.0 qui utilise la classe ExternalInterface.

import flash.display.Sprite; 
import flash.external.ExternalInterface; 
import flash.net.URLLoader; 
import flash.net.URLRequest; 

if (ExternalInterface.available) { 
    ExternalInterface.addCallback("handleDroppedImage", myDroppedImageHandler); 
} 

private function myDroppedImageHandler(url:String, x:Number, y:Number):void { 

    var container:Sprite = new Sprite(); 
    container.x = x; 
    container.y = y; 
    addChild(container); 

    var loader:Loader = new Loader(); 
    var request:URLRequest = new URLRequest(url); 
    loader.load(request); 

    container.addChild(loader); 
} 

Voici le code HTML/jQuery

<html> 
<head> 
    <title>XHTML 1.0 Transitional Template</title> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.5.2/jquery-ui.min.js"></script> 
    <script type="text/javascript"> 
    $(function() { 
     $("#dragIcon").draggable(); 

     $("#flash").droppable({ 
     tolerance : "intersect", 
     drop: function(e,ui) { 

      // Get the X,Y coords relative to to the flash movie 
      var x = $(this).offset().left - ui.draggable.offset().left; 
      var y = $(this).offset().top - ui.draggable.offset().top; 

      // Get the url of the dragged image 
      var url = ui.draggable.attr("src"); 

      // Get access to the swf 
      var swf = ($.browser.msie) ? document["MyFlashMovie"] : window["MyFlashMovie"]; 

      // Call the ExternalInterface function 
      swf.handleDroppedImage(url, x, y); 

      // remove the swf from the javascript DOM 
      ui.draggable.remove(); 
     } 
     }); 
    }); 
    </script> 
</head> 
<body> 

    <img id="dragIcon" width="16" height="16" alt="drag me" /> 

    <div id="flash"> 
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 
     id="MyFlashMovie" width="500" height="375" 
     codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab"> 
     <param name="movie" value="MyFlashMovie.swf" /> 
     <param name="quality" value="high" /> 
     <param name="bgcolor" value="#869ca7" /> 
     <param name="allowScriptAccess" value="sameDomain" /> 
     <embed src="MyFlashMovie.swf" quality="high" bgcolor="#869ca7" 
     width="500" height="375" name="MyFlashMovie" align="middle" 
     play="true" loop="false" quality="high" allowScriptAccess="sameDomain" 
     type="application/x-shockwave-flash" 
     pluginspage="http://www.macromedia.com/go/getflashplayer"> 
     </embed> 
    </object> 
    </div> 

</body> 
</html> 
Questions connexes