JavaScript を使用して Flash アプレットの外へ、または外へドラッグ アンド ドロップすることはできますか?
-
01-07-2019 - |
質問
Flash アプレットを含む Web ページが必要で、Web ページの残りの部分との間でいくつかのオブジェクトをドラッグ アンド ドロップしたいとします。これは可能でしょうか?
それを行うウェブサイトをどこかで知っていればボーナスです!
解決
これは私に興味をそそりました。私がこれを理解しようとしていた間に jessegavin がいくつかのコードを投稿したことは知っていますが、これはテスト済みです。フラッシュにドラッグしたり、フラッシュからドラッグしたりできる非常に単純な例があります。お昼休みにまとめたのでかなり汚いです。
こちらが デモ
そしてその ソース
基本クラスはから直接取得されます。 外部インターフェイス LiveDocs. 。ボタンにテキストを含められるように MyButton を追加しました。JavaScript の大部分は、同じ LiveDocs サンプルから来ています。
これをmxmlcを使用してコンパイルしました。
他のヒント
免責事項 このコードはまったくテストしていませんが、このアイデアは機能するはずです。また、これはドラッグのみを処理します に フラッシュムービー。
以下は、 外部インターフェース クラス。
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>
落とす可能性はあると言えます に アイテムがフラッシュ要素を含む にドラッグされていることを検出し、ドラッグされたオブジェクトの Z インデックスがフラッシュよりも高いように設定した場合は、フラッシュします。その後、ドロップされたときに、JavaScript を使用して Flash に話しかけ、どこに何がドロップされたかを通知できます。
ただし、その逆はおそらくはるかに困難です。オブジェクトが Flash ムービーの境界に達したときを検出し、それを JavaScript ハンドラーに「渡す」必要があるからです (HTML で作成し、Flash で非表示にします)。
おそらく問題は、苦労する価値があるかどうか、それとも JS または Flash ですべてを実現できるかどうかを知ることです。
ちょっと待ってください。カプセル化ポイントは有効ですが、Flash は JS 関数を実行できます。より高い z-index を持つ HTML 要素が Flash ムービー上でフロートされるべきだという Seldaek の指摘は正しいです。したがって、すべてのドラッグ処理を JS で実行し、Flash にアプリ内のポインターの独自の寸法と位置を読み取らせると、(特に) ポインターが外部を離れたときでも、要素をポインターにスレーブするという JS メソッドに通知できます。 Flash アプリの境界。かなり毛深いでしょうけど。
サイト全体が 1 つの大きな埋め込み Flash ファイルである場合は、可能です。
それ以外の方法では達成できないと思います
Flash では不可能です - 同じ Flash アプリケーション内のターゲットにドラッグする場合を除きます。
おそらく、署名付き Java アプレットを使用して実行できるでしょう (しかし、誰がその道を進みたいでしょうか?)