Est-il possible de glisser-déposer de / vers l'extérieur d'une applet Flash avec JavaScript?

StackOverflow https://stackoverflow.com/questions/82509

  •  01-07-2019
  •  | 
  •  

Question

Supposons que je souhaite une page Web contenant une applet Flash et que je souhaite faire glisser des objets de ou vers le reste de la page Web. Est-ce possible?

Bonus si vous connaissez un site Web qui fait cela!

Était-ce utile?

La solution

Celui-ci m'a intrigué. Je sais que jessegavin a posté du code pendant que j'allais comprendre cela, mais celui-ci est testé. J'ai un exemple de travail super simple qui vous permet de faire glisser à partir de flash. C'est assez compliqué car je l'ai jeté ensemble pendant ma pause déjeuner.

Voici la démo

Et la source

La classe de base provient directement de la de l'interface externe 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é avec mxmlc.

Autres conseils

AVERTISSEMENT : je n'ai pas testé ce code, mais l'idée devrait fonctionner. De plus, cela ne gère que le glissement vers d'un film flash.

Voici du code Actionscript 3.0 utilisant le ExternalInterface classe.

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>

Je dirais qu'il est possible de déposer vers Flash si vous détectez que l'élément est déplacé sur l'élément contenant le contenu Flash et que vous définissez un z-index supérieur pour vos objets. que le flash. Ensuite, quand il est déposé, vous pouvez parler à Flash en utilisant javascript pour lui dire où et ce qui a été supprimé.

Cependant, l’inverse est probablement beaucoup plus difficile, car vous devez détecter le moment où l’objet atteint la bordure du film flash et "passer". au gestionnaire javascript (créez-le en html, cachez-le en flash).

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

Attendez, le point d’encapsulation est valide, mais Flash peut exécuter des fonctions JS. Seldaek a raison de dire qu’un élément HTML avec un indice z supérieur doit flotter dans l’animation flash. Donc, si vous maîtrisiez bien le glisser dans JS et que le flash lisait ses propres dimensions et la position du pointeur dans l'application, il pourrait signaler aux méthodes JS cet élément esclave (s) au pointeur même (surtout) lorsque le pointeur quitte le limites de l'application flash. Ce serait plutôt poilu.

Si tout le site est constitué d'un seul gros fichier flash intégré, alors c'est possible.

Je ne pense pas que vous puissiez y parvenir d'une autre manière

Impossible en flash - à moins que vous ne souhaitiez faire glisser 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?)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top