当前位置: 首页 > 知识库问答 >
问题:

Flash对象中的click事件处理程序可以对JavaScript从另一个DOM元素委托的click事件做出反应吗?

朱欣荣
2023-03-14

我有一个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>

共有1个答案

怀德馨
2023-03-14

使用ExternalInterface在SWF和DOM之间进行通信。

您可以在SWF中创建一个函数,然后使用以下方法从JS调用ActionScript函数:

ExternalInterface.call( functionInsideYourSWF )

在您的情况下,当有人点击您的画布元素时,您会调用您的ActionScript函数,然后让Flash用您在ActionScript函数中定义的任何内容处理该点击事件,例如播放您的视频。

 类似资料:
  • 问题内容: 因此,如果我有一个带有100 li的ul,则每个li都应该有ng- clicks或是否有办法将事件绑定到ul并将其委派给li的jquery的工作方式?这会好还是坏?我们有100个事件,还是最后只有一个事件? 问题答案: 似乎angular并没有使用中继器进行事件委派。有人在github上发布了一个关于它的问题。争论在于它是否实际上会带来更好的性能。 可能有解决方法,但需要jQuery。

  • 问题内容: 我正在尝试从触发元素的click事件。 通常的做法是隐藏被称为丑化的野兽,并通过其他方式触发其点击事件。 问题答案: 如果您的输入和按钮是同级(在您的情况下是OP): 使用指令将按钮的单击绑定到文件输入,如下所示:

  • 本文向大家介绍js中事件对象和事件委托的介绍,包括了js中事件对象和事件委托的介绍的使用技巧和注意事项,需要的朋友参考一下 Ie9以下浏览器中的事件对象是放在全局中的window.event; 解决兼容性:event = event || window.event 事件委托(就是将事件绑定到父级/爷爷级对象上,通过事件对象的target属性来控制子级对象的改变): event.target(点击的

  • 本文向大家介绍说一下对事件委托理解?相关面试题,主要包含被问及说一下对事件委托理解?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 简介:事件委托指的是,不在事件的发生地(直接dom)上设置监听函数,而是在其父元素上设置监听函数,通过事件冒泡,父元素可以监听到子元素上事件的触发,通过判断事件发生元素DOM的类型,来做出不同的响应。 举例:最经典的就是ul和li标签的事件监听,比如我们在添加

  • 该事件发生在用户单击CommandBarButton 对象时。 Private Sub CommandBarButton_Click (ByVal Ctrl As CommandBarButton, ByVal CancelDefault As Boolean) Click 事件的语法中包含两个参数,下表中列出了对这两个参数的说明。参数说明CtrlCommandBarButton 类型,必需。指示

  • 问题内容: 我在一个div内放了一个嵌入式Flash电影,在主div上放了一个javascript onclick事件处理程序,但是没有捕捉到点击,这是怎么回事? 码: 问题答案: 最好将所有swf都视为z阶无穷大。Flash是最重要的,只有很少的事情可以阻止它。另一方面,如果您可以访问SWF本身的代码,或者可以使用另一个SWF加载当前的SWF,则可以使用几个不同的Flash命令来处理页面的Jav