1

同じサイズのFlashオブジェクトの上にcanvas要素を配置しました。canvas要素をクリックして、そのイベント(より正確には、そのイベントの模倣)を下のFlashオブジェクトにディスパッチできるようにしたいと思います。

イベントリスナーをFlashオブジェクトに追加したので、イベントがFlashオブジェクトに正常にディスパッチされていることがわかります。問題は、Flashオブジェクトが単にそれに反応しないことです(たとえば、巨大な「再生」ボタンの領域をクリックしてもビデオは再生されません)。

Flashオブジェクトはこの方法でイベントに反応できますか?DOMのFlashについて、応答をアクティブ化するためにJavaScriptイベント委任以外のものを必要とする特別なものはありますか?

<!DOCTYPE html>
<html lang = "en">
    <頭>
        <meta charset = "utf-8" />
        <title>クリックイベントをDOM要素から基になるFlashオブジェクトに委任する</title>
    </ head>
    <本体>
        <object type = "application / x-shockwave-flash" name = "StrobeMediaPlayback" data = "assets / StrobeMediaPlayback.swf" width = "640" height = "480" id = "StrobeMediaPlayback" style = "visibility:visible; position :絶対;上:0;左:0; ">
            <param name = "allowFullScreen" value = "true">
            <param name = "wmode" value = "transparent">
            <param name = "flashvars" value = "src = http://mediapm.edgesuite.net/strobe/content/test/AFaerysTale_sylviaApostol_640_500_short.flv&autoPlay=false&verbose=true&controlBarAutoHide=false&controlBarPosition=bottom&poster=assets/images/StrobeMediaPlayback.png">
        </ object>
        <script type = "text / javascript">
            var smp = document.getElementById('StrobeMediaPlayback');
            smp.addEventListener('click'、function(e){console.log('CLICK');}、false);
            addCanvas();
            
            関数addCanvas(){
                canvas = document.createElement('canvas');
                canvas.width = 640;
                canvas.height = 480;
                canvas.style.position='絶対';
                canvas.style.top = '0px';
                canvas.style.left = '0px';
                canvas.addEventListener('click'、function(e){evt(smp、e);}、false);
                ctx = canvas.getContext( '2d');
                document.body.appendChild(canvas);
            }
            
            関数evt(el、e){
                var event = document.createEvent('HTMLEvents');
                event.initEvent(e.type、true、true);
                for(var key in e){
                    event [key] = e [key];
                }
                el.dispatchEvent(event);
            }
        </ script>
    </ body>
</ html>
4

1 に答える 1

1

ExternalInterfaceを使用して、SWFとDOMの間で通信します。

SWF内に関数を作成し、次を使用してJSからそのActionScript関数を呼び出すことができます。

ExternalInterface.call( functionInsideYourSWF )

あなたの場合、誰かがあなたのキャンバス要素をクリックしたときにActionScript関数を呼び出し、次に、ActionScript関数内で定義したもの(ビデオの再生など)を使用して、そのクリックイベントを内部でFlashに処理させます。

于 2012-06-15T21:44:41.753 に答える