点击带有闪光灯的iframe

时间:2014-09-02 15:01:10

标签: javascript iframe flash transparent click-through

我有一个内置闪光灯和iFrame,我想点击iFrame而不是通过闪光灯。我已经看到了,我们可以通过“pointer-events:none;”点击iFrame。但它传递iframe内的所有内容。现在我只想知道,我们可以在flash中启用或检查鼠标点击吗?

我为我的问题添加了一个示例。黑点位于flash swf文件中,并且位于iFrame中。现在当我点击透明区域时,应该在这种情况下点击标签按钮下面的区域。否则应点击黑点。

Click Underneath Flash

2 个答案:

答案 0 :(得分:1)

我认为如果您在iframe中遇到iframe并不重要,如果我理解正确您需要从Flash到基础HTML页面的直接点击,但仅当点击不是这样的时候满足某些条件(在这种情况下,只有当它没有超过黑点时)。

一种方法是在Flash部分和iframe中的一些JavaScript部分之间协作:

  • 拦截Flash中的点击,获取坐标并验证它是否在黑色圆圈上
  • 如果是,请在Flash中处理相应的逻辑,否则请继续执行以下步骤
  • 将坐标传递给已通过Flash外部接口
  • 在iframe中定义的JavaScript函数
  • 最后在JavaScript中,您可以按照How to simulate a click by using x,y coordinates in JavaScript?
  • 的方式执行操作

答案 1 :(得分:1)

待办事项列表:

  1. 在iframe上使用CSS属性pointer-events: none;
  2. 使用 ID =" event-eater" 创建一个不可见的 div ,其中包含元素。
  3. 在下面添加Javascript(使用jQuery)来识别点击发生的地方
  4. 它会调用actionscript方法ClickPosition并根据返回的结果做以下1
    • 如果单击黑色区域 - 不执行任何操作,则在actionscript中创建click事件
    • 如果点击了背景 - 暂时隐藏当前元素,并重新创建点击javascript
  5. 的Javascript

    $('#event-eater').click(function(evt) {
        var posX = $(this).offset().left, posY = $(this).offset().top;
        var x = Math.abs(Math.round(evt.pageX - posX));
        var y = Math.abs(Math.round(evt.pageY - posY));
        var result = "["+x+", "+y+"]";
        if(document['flashInterface'].ClickPosition(result)=="true"){
            $('#event-eater').css({display:'none'});
            starter = document.elementFromPoint(evt.clientX, evt.clientY);
            $(starter).click();
            $('#event-eater').css({display:''});
        };
    });
    

    的Actionscript

    package
    {
        import fl.events.ColorPickerEvent;
        import flash.display.MovieClip;
        import flash.external.ExternalInterface;
        public class Main extends MovieClip {
            //set this variable true if background was clicked last, false otherwise
            var wasBackgroundClickedLast:Boolean = new Boolean(true)
            public function Main() {
                //allows JavaScript to access the ClickPosition() function.
                ExternalInterface.addCallback("ClickPosition", clickPosition);  
            }
            public function clickPosition(value:String):String{
                var va= str.split(",");
                simulateClick(Number(va[0]),Number(va[1]));
                return wasBackgroundClicked.toString();
            }
            public function simulateClick(x:Number, y:Number):void
            {
                var objects:Array = stage.getObjectsUnderPoint(new Point(x, y));
                var target:DisplayObject;
                while(target = objects.pop()){if(target is InteractiveObject){ break; }}
                if(target !== null)
                {
                    var local:Point = target.globalToLocal(new Point(x, y));
                    var e:MouseEvent = new MouseEvent(
                        MouseEvent.CLICK, true, false, local.x, local.y);
                    target.dispatchEvent(e);
                }
            }
        }
    }
    

    Small demo:Javascript eventeater,下方有按钮数组。