2008-09-17 4 views

답변

12

이 하나가 나에게 흥미입니다. 나는 이것을 알아 내기 위해 jessegavin이 몇 가지 코드를 게시 한 것을 알고 있지만,이 코드는 테스트를 거쳤습니다. 나는 플래시에서 드래그 할 수있는 아주 간단한 작업 예제를 가지고있다. 점심 시간에 같이 던져 버렸을 때 꽤 엉망이었습니다.

다음은 demo

그리고 기본 클래스가 External Interface LiveDocs에서 직접 촬영 한 source

을합니다. 버튼에 텍스트가 포함될 수 있도록 MyButton을 추가했습니다. 대부분의 자바 스크립트는 동일한 LiveDocs 예제에서 제공됩니다.

나는이 사용 mxmlc에 컴파일.

+0

고마워, 나는 그게 불가능하다는 다른 대답을 증명하는 것 같아요! – BoD

+0

가는 방법 enobrev! 정말 매끄럽다. – jessegavin

+0

고맙습니다. 그것은 다소 버그가 있지만 개념의 증거는 없습니다. – enobrev

0

전체 사이트가 하나의 큰 내장 플래시 파일 인 경우 가능합니다.

난 당신이 그것을 다른 방법

를 acheive 수 있다고 생각하지 않습니다
1

나는 당신이 항목이 플래시 물건이 들어 그에게 끌 것을 감지하면 플래시에 을 드롭 할 수 말할 것입니다, 드래그 된 객체를 플래시보다 높은 z- 인덱스로 설정합니다. 그런 다음 자바 스크립트를 사용하여 어디서 무엇이 떨어 졌는지 Flash에 말할 수 있습니다.

그러나 그 반대의 경우는 객체가 플래시 무비의 경계에 도달하여 자바 스크립트 핸들러에 전달할 때 감지해야하기 때문에 주위가 훨씬 더 어려울 것입니다 (HTML에서 생성하고 숨기고 플래시).

문제는 그게 문제가 있는지, 아니면 JS 나 Flash에서 모든 것을 얻을 수 있는지 궁금 할 것입니다.

+0

그래서 나는 대답을 추측합니다 : 그것은 표준 방법으로 그것을 할 수있는 알려진 API 또는 다른 시설이 없습니다 – BoD

0

플래시에서는 불가능합니다. 동일한 플래시 응용 프로그램 내에서 대상으로 드래그하지 않는 한.

아마 서명 된 Java 애플릿으로 수행 (하지만 누가 그 길을 가고 싶어?) 될 수 있습니다

, 캡슐화 포인트가 JS 기능을 실행할 수있는 유효한 하나를 제외한 플래시, 그리고 Seldaek이 권리에
1

잠시 그 Z- 인덱스가 더 높은 HTML 요소는 플래시 무비에 떠 있어야합니다. 따라서 JS에서 모든 드래그 처리를 수행하고 플래시에서 자체 치수와 앱의 포인터 위치를 읽으면 JS 메서드에서 포인터에 대한 슬레이브 요소 (심지어는 포인터)가 포인터를 벗어 났을 때 (특히) JS 메서드에 신호를 보낼 수 있습니다 플래시 앱의 경계. 그것은 꽤 털이 많을 것이다.

3

면책 조항이 코드를 전혀 테스트하지는 않았지만 아이디어가 효과적입니다. 또한 이것은 끌기 만 처리합니다. ~ 플래시 동영상입니다.

다음은 ExternalInterface 클래스를 사용하는 Actionscript 3.0 코드입니다.

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); 
} 

다음은 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>