2008-09-17 9 views

Respuesta

12

Éste me intrigó. Sé que Jessegavin publicó un código mientras fui a resolver esto, pero este está probado. Tengo un ejemplo de trabajo super simple que te permite arrastrar hacia y desde el flash. Es bastante desordenado cuando lo tiré durante mi pausa para el almuerzo.

Aquí está la demo

Y el source

La clase base se toma directamente de la External Interface LiveDocs. Agregué MyButton para que el botón pudiera tener texto. La mayoría de los javascript provienen del mismo ejemplo de LiveDocs.

Compilé esto usando mxmlc.

+0

Muchas gracias, creo que eso es incorrecto, las otras respuestas dicen que no es posible. – BoD

+0

¡Así se hace enobrev! Eso es realmente astuto. – jessegavin

+0

Gracias señor. Es un poco problemático, pero una prueba de concepto nada menos. – enobrev

0

Si todo el sitio es un gran archivo flash incrustado, entonces sí, es posible.

no creo que se puede acheive de ninguna otra manera

1

Yo diría que es posible eliminar a flash si detecta que el artículo se prolongó a la que contiene el material flash, y configura los objetos arrastrados para que tengan un índice Z más alto que el flash. Luego, cuando se cancele, puede hablar con Flash usando javascript para indicar dónde y qué se eliminó.

Sin embargo, al revés es probablemente mucho más difícil, ya que tendría que detectar cuando el objeto toca el borde de la película flash y "pasarlo" al controlador de javascript (créelo en el html, escóndalo en destello).

La pregunta probablemente sea para saber si vale la pena, o si puede lograr todo en JS o en Flash.

+0

Así que supongo que la respuesta es: puede ser posible pero no hay una API conocida u otra facilidad para hacerlo de manera estándar – BoD

0

No es posible en flash, a menos que desee arrastrar a un destino dentro de la misma aplicación flash.

probablemente se podría hacer con un applet de Java firmado (pero que quiere ir por ese camino?)

1

Espera, el punto de encapsulación es válida, pero el flash puede ejecutar funciones de JS, y Seldaek es justo que un elemento HTML con un índice Z más alto debería flotar en la película flash. Entonces, si hacía todo el manejo del arrastre en JS e hizo que el flash leyera sus propias dimensiones y la posición del puntero en la aplicación, podría señalar los métodos JS que los elementos esclavos al puntero incluso (especialmente) cuando el puntero sale del límites de la aplicación flash. Aunque sería bastante peludo.

3

DESCARGO DE RESPONSABILIDAD No he probado este código en absoluto, pero la idea debería funcionar. Además, esto solo maneja el arrastre a una película flash.

Aquí hay un código de Actionscript 3.0 que hace uso de la clase 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); 
} 

Aquí está el HTML/código de 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>