簡體   English   中英

Flash對象中的單擊事件處理程序是否可以響應JavaScript從另一個DOM元素委派的單擊事件?

[英]Can click event handlers in a Flash object react to click events delegated by JavaScript from another DOM element?

我有一個canvas元素,絕對位於相同尺寸的Flash對象上。 我希望能夠單擊canvas元素並將該事件(或更准確地說,是該事件的模仿)調度到下面的Flash對象。

我向Flash對象添加了一個事件偵聽器,因此我知道該事件已成功調度到Flash對象。 問題在於Flash對象根本不對其做出反應(例如,單擊巨型“播放”按鈕的區域不會播放視頻)。

Flash對象可以以這種方式對事件做出反應嗎? DOM中的Flash是否有一些特殊之處,需要JavaScript事件委托以外的其他東西來激活來自它的響應?

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8"/>
        <title>Delegating click events from a DOM element to an underlying Flash object</title>
    </head>
    <body>
        <object type="application/x-shockwave-flash" name="StrobeMediaPlayback" data="assets/StrobeMediaPlayback.swf" width="640" height="480" id="StrobeMediaPlayback" style="visibility: visible; position: absolute; top: 0; left: 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();
            
            function addCanvas() {
                canvas = document.createElement('canvas');
                canvas.width = 640;
                canvas.height = 480;
                canvas.style.position = 'absolute';
                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);
            }
            
            function 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>

使用ExternalInterface在SWF和DOM之間進行通信。

您可以在SWF中創建一個函數,然后使用以下方法從JS調用該ActionScript函數:

ExternalInterface.call( functionInsideYourSWF )

在您的情況下,當有人單擊畫布元素時,您將調用ActionScript函數,然后讓Flash句柄使用您在ActionScript函數中定義的內容在內部進行click事件,例如播放視頻。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM