假設我想要一個包含Flash小程序的網頁,並且想要將一些對象從網頁的其餘部分拖放到網頁的其餘部分,這是否可能?是否可以使用JavaScript將Flash小程序從/拖放到外部?
獎勵,如果你知道一個網站的某個地方那麼做!
假設我想要一個包含Flash小程序的網頁,並且想要將一些對象從網頁的其餘部分拖放到網頁的其餘部分,這是否可能?是否可以使用JavaScript將Flash小程序從/拖放到外部?
獎勵,如果你知道一個網站的某個地方那麼做!
這一次吸引了我。我知道jessegavin發佈了一些代碼,而我去了解這一點,但是這個測試。我有一個超級簡單的工作示例,可以讓您拖放到Flash中。在午休期間,我把它扔在一起,非常混亂。
這裏的demo
而且source
的基類是直接取自External Interface LiveDocs。我添加了MyButton,以便按鈕可以有一些文本。大部分的JavaScript來自相同的LiveDocs示例。
我編譯這個使用mxmlc。
如果整個網站是一個大的嵌入式Flash文件,那麼是的,這是可能的。
我不認爲你可以acheive任何其他方式
我會說這是能夠丟棄到閃存,如果你發現該項目一拖再拖到包含閃光的東西,並且您將拖動的對象設置爲z-index高於flash。然後,當它被丟棄時,您可以使用JavaScript與Flash交談,告訴它在哪裏以及什麼被丟棄。
然而,其他方式可能更難,因爲你必須檢測什麼時候該對象擊中Flash電影的邊界,並將其「傳遞」到JavaScript處理程序(在HTML中創建它,將其隱藏閃)。
這個問題可能是知道它是否值得麻煩,或者如果你可以在JS或Flash中實現所有功能?
所以我想答案是:這可能是可能的,但沒有已知的API或其他設施以標準的方式做到這一點 – BoD 2008-09-17 15:42:55
不可能在閃光 - 除非你想拖動到相同的Flash應用程序內的目標。
很可能有簽名的Java小程序來完成(但誰願意走這條道路?)
坑上,封裝點是一個有效的,但閃光燈可以執行JS的功能,Seldaek是正確的具有較高z-index的HTML元素應該浮動在Flash影片上。所以如果你在JS中做了所有的拖拽處理,並且讓flash讀取了它自己的尺寸和指針在應用中的位置,它可以發信號通知JS方法,從而使元素(甚至) Flash應用程序的邊界。這將是非常毛茸茸的。
免責聲明我還沒有測試過這個代碼,但這個想法應該可行。此外,這隻處理拖動到一個Flash電影。
這是一些使用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 2008-09-18 08:12:08