如何在openlaszlo中获得基于坐标的视图?

时间:2012-10-25 09:56:57

标签: openlaszlo lzx

在JavaScript中,我们有document.elementfrompoint来获取基于坐标的元素。 在Openlaszlo中是否有类似的东西来获取基于坐标的视图?

2 个答案:

答案 0 :(得分:3)

OpenLaszlo中没有直接支持该功能,但对于基于ActionScript 3的运行时,您可以使用flash.display.DisplayObjectContainer#getObjectsUnderPoint()方法。在DHTML运行时中,您可以使用所有现代浏览器都应支持的document.elementFromPoint(x, y)based on Quirksmode

以下是实施canvas.elementFromPoint()方法的示例程序:

<canvas debug="true">

    <passthrough when="$as3">
        import flash.geom.Point;
    </passthrough>

    <view id="background" width="100%" height="100%" bgcolor="#eeeeee" clickable="true"/>

    <view id="red" x="200" y="100" width="200" height="200" bgcolor="#ff0000" opacity="0.3" clickable="true" />
    <view id="green" x="150" y="200" width="200" height="200" bgcolor="#00ff00" opacity="0.3" clickable="true"/>
    <view id="blue" x="250" y="200" width="200" height="200" bgcolor="#0000ff" opacity="0.3" clickable="true"/>

    <handler name="onclick" reference="lz.GlobalMouse">
        canvas.elementFromPoint();
    </handler>

    <method name="elementFromPoint"><![CDATA[
        var mouseX = canvas.getMouse('x'),
            mouseY = canvas.getMouse('y'),
            objects = null,     // array of objects at mouse pointer in SWF runtime
            element = null;     // The element we are looking for
        Debug.info( 'mouse position: x=' + mouseX + ' / mouseY=' + mouseY );
        if ($as3) {
            // in SWF runtime, use the DisplayObjectContainer.getObjectsUnderPoint() method
            objects = canvas.getDisplayObject().getObjectsUnderPoint(new Point(mouseX, mouseY));
            element = objects[objects.length-1].owner;
        } else {
            // in DHTML, we can use elementFromPoint, and need to retrieve the owner view of the div
            element = document.elementFromPoint(mouseX, mouseY).owner.owner;
        }
        Debug.info('View under mousecursor:', element);
        return element;
    ]]></method>

</canvas>

有4个视图,一个背景视图缩放到100%x 100%。三种颜色视图:红色,绿色和蓝色 - 蓝色是最顶层的。单击视图时,将返回正确的视图对象。

enter image description here

此代码已在DHTML运行时中使用Chrome 22.0,Firefox 16.0.1和Opera 12.02进行了测试。 Flash应该可以在每个浏览器中使用,我还没有使用IE进行测试。

答案 1 :(得分:0)

我不这么认为。 您将必须构建自己的自定义数组或观察者对象,收集所有视图,然后遍历所有项目并检查坐标是否在视图的边界框内。 在Flash中还有类似于&#34; hitTest&#34;的东西,类似于JavaScript&#34; document.elementfrompoint&#34;获取精确的像素匹配,以防边界框不够。

塞巴斯蒂安