在JavaScript中,我们有document.elementfrompoint来获取基于坐标的元素。 在Openlaszlo中是否有类似的东西来获取基于坐标的视图?
答案 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%。三种颜色视图:红色,绿色和蓝色 - 蓝色是最顶层的。单击视图时,将返回正确的视图对象。
此代码已在DHTML运行时中使用Chrome 22.0,Firefox 16.0.1和Opera 12.02进行了测试。 Flash应该可以在每个浏览器中使用,我还没有使用IE进行测试。
答案 1 :(得分:0)
我不这么认为。 您将必须构建自己的自定义数组或观察者对象,收集所有视图,然后遍历所有项目并检查坐标是否在视图的边界框内。 在Flash中还有类似于&#34; hitTest&#34;的东西,类似于JavaScript&#34; document.elementfrompoint&#34;获取精确的像素匹配,以防边界框不够。
塞巴斯蒂安