플래시 애플릿이 포함 된 웹 페이지를 원한다고 가정하고 일부 객체를 웹 페이지의 나머지 부분으로 드래그 앤 드롭하고 싶다면이 모든 것이 가능합니까?JavaScript로 플래시 애플릿 외부로 드래그 앤 드롭 할 수 있습니까?
어딘가에 웹 사이트를 알면 보너스!
플래시 애플릿이 포함 된 웹 페이지를 원한다고 가정하고 일부 객체를 웹 페이지의 나머지 부분으로 드래그 앤 드롭하고 싶다면이 모든 것이 가능합니까?JavaScript로 플래시 애플릿 외부로 드래그 앤 드롭 할 수 있습니까?
어딘가에 웹 사이트를 알면 보너스!
이 하나가 나에게 흥미입니다. 나는 이것을 알아 내기 위해 jessegavin이 몇 가지 코드를 게시 한 것을 알고 있지만,이 코드는 테스트를 거쳤습니다. 나는 플래시에서 드래그 할 수있는 아주 간단한 작업 예제를 가지고있다. 점심 시간에 같이 던져 버렸을 때 꽤 엉망이었습니다.
다음은 demo
그리고 기본 클래스가 External Interface LiveDocs에서 직접 촬영 한 source
을합니다. 버튼에 텍스트가 포함될 수 있도록 MyButton을 추가했습니다. 대부분의 자바 스크립트는 동일한 LiveDocs 예제에서 제공됩니다.
나는이 사용 mxmlc에 컴파일.
전체 사이트가 하나의 큰 내장 플래시 파일 인 경우 가능합니다.
난 당신이 그것을 다른 방법
를 acheive 수 있다고 생각하지 않습니다나는 당신이 항목이 플래시 물건이 들어 그에게 끌 것을 감지하면 플래시에 을 드롭 할 수 말할 것입니다, 드래그 된 객체를 플래시보다 높은 z- 인덱스로 설정합니다. 그런 다음 자바 스크립트를 사용하여 어디서 무엇이 떨어 졌는지 Flash에 말할 수 있습니다.
그러나 그 반대의 경우는 객체가 플래시 무비의 경계에 도달하여 자바 스크립트 핸들러에 전달할 때 감지해야하기 때문에 주위가 훨씬 더 어려울 것입니다 (HTML에서 생성하고 숨기고 플래시).
문제는 그게 문제가 있는지, 아니면 JS 나 Flash에서 모든 것을 얻을 수 있는지 궁금 할 것입니다.
그래서 나는 대답을 추측합니다 : 그것은 표준 방법으로 그것을 할 수있는 알려진 API 또는 다른 시설이 없습니다 – BoD
플래시에서는 불가능합니다. 동일한 플래시 응용 프로그램 내에서 대상으로 드래그하지 않는 한.
아마 서명 된 Java 애플릿으로 수행 (하지만 누가 그 길을 가고 싶어?) 될 수 있습니다
, 캡슐화 포인트가 JS 기능을 실행할 수있는 유효한 하나를 제외한 플래시, 그리고 Seldaek이 권리에잠시 그 Z- 인덱스가 더 높은 HTML 요소는 플래시 무비에 떠 있어야합니다. 따라서 JS에서 모든 드래그 처리를 수행하고 플래시에서 자체 치수와 앱의 포인터 위치를 읽으면 JS 메서드에서 포인터에 대한 슬레이브 요소 (심지어는 포인터)가 포인터를 벗어 났을 때 (특히) JS 메서드에 신호를 보낼 수 있습니다 플래시 앱의 경계. 그것은 꽤 털이 많을 것이다.
면책 조항이 코드를 전혀 테스트하지는 않았지만 아이디어가 효과적입니다. 또한 이것은 끌기 만 처리합니다. ~ 플래시 동영상입니다.
다음은 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>
고마워, 나는 그게 불가능하다는 다른 대답을 증명하는 것 같아요! – BoD
가는 방법 enobrev! 정말 매끄럽다. – jessegavin
고맙습니다. 그것은 다소 버그가 있지만 개념의 증거는 없습니다. – enobrev