6

Flash アプレットを含む Web ページが必要で、いくつかのオブジェクトを Web ページの残りの部分からドラッグ アンド ドロップしたいとします。これは可能ですか?

それを行うウェブサイトをどこかに知っていればボーナスです!

4

6 に答える 6

12

これは私に興味をそそられました。私がこれを理解しようとしている間に jessegavin がいくつかのコードを投稿したことは知っていますが、これはテスト済みです。フラッシュとの間でドラッグできる非常に単純な作業例があります。昼休みにまとめたのでかなりぐちゃぐちゃです。

デモはこちら

そして、ソース

基本クラスは、外部インターフェイス LiveDocsから直接取得されます。ボタンにテキストを含めることができるように、MyButton を追加しました。JavaScript の大部分は、同じ LiveDocs の例から来ています。

これを mxmlc を使用してコンパイルしました。

于 2008-09-17T17:19:27.330 に答える
3

免責事項私はこのコードをまったくテストしていませんが、アイデアは機能するはずです。また、これはフラッシュムービーのドラッグのみを処理します。

これは、 ExternalInterfaceクラスを利用するActionscript3.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>
于 2008-09-17T15:50:37.420 に答える
1

アイテムがフラッシュのものを含むにドラッグされていることを検出し、ドラッグされたオブジェクトのz-indexがフラッシュよりも高くなるように設定すると、フラッシュにドロップできると思います。次に、ドロップされたときに、javascriptを使用してFlashと通信し、ドロップされた場所と内容を通知できます。

ただし、オブジェクトがフラッシュムービーの境界に当たったことを検出し、それをjavascriptハンドラーに「渡す」必要があるため(htmlで作成し、フラッシュで非表示にする)、逆の方法はおそらくはるかに困難です。

問題はおそらく、それが問題の価値があるかどうか、またはJSまたはFlashですべてを達成できるかどうかを知ることです。

于 2008-09-17T12:30:52.720 に答える
1

ちょっと待ってください。カプセル化ポイントは有効なものですが、Flash は JS 関数を実行できます。Seldaek が言うように、より高い z-index を持つ HTML 要素は Flash ムービーでフロートする必要があります。したがって、すべてのドラッグ処理を JS で行い、フラッシュに独自の寸法とアプリ内のポインターの位置を読み取らせた場合、(特に) ポインターがポインターを離れたときでも、要素をポインターにスレーブさせる JS メソッドにシグナルを送ることができます。 Flash アプリの境界。かなり毛むくじゃらだろうけど。

于 2008-09-17T13:10:51.720 に答える
0

フラッシュでは不可能-同じフラッシュアプ​​リケーション内のターゲットにドラッグする場合を除きます。

おそらく、署名されたJavaアプレットを使用して実行できます(ただし、誰がその道を進みたいですか?)

于 2008-09-17T12:32:19.737 に答える
0

サイト全体が 1 つの大きな埋め込み Flash ファイルである場合は、可能です。

他の方法で達成できるとは思わない

于 2008-09-17T12:23:46.980 に答える