3

JavaScript では、座標に基づいて要素を取得するための document.elementfrompoint があります。座標に基づいてビューを取得するための Openlaszlo のようなものはありますか?

4

2 に答える 2

3

OpenLaszlo ではその機能を直接サポートしていませんが、ActionScript 3 ベースのランタイムでは、flash.display.DisplayObjectContainer#getObjectsUnderPoint()メソッドを利用できます。DHTML ランタイムでは、document.elementFromPoint(x, y)を使用でき、最新のすべてのブラウザーでサポートされる 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 つのビューがあり、1 つの背景ビューは 100% x 100% にスケーリングされます。そして 3 つのカラー ビュー: 赤、緑、青 - 青が一番上に表示されます。ビューをクリックすると、正しいビュー オブジェクトが返されます。

ここに画像の説明を入力

このコードは、Chrome 22.0、Firefox 16.0.1、および Opera 12.02 の DHTML ランタイムでテストされています。Flash はすべてのブラウザーで動作するはずですが、IE ではテストしていません。

于 2012-10-25T15:24:08.770 に答える
0

私はそうは思わない。独自のカスタム配列またはオブザーバーオブジェクトを作成し、すべてのビューを収集してから、すべてのアイテムをループして、座標がビューの境界ボックス内にあるかどうかを確認する必要があります。Flashには、「hitTest」のようなものもあります。これは、バウンディングボックスでは不十分な場合に備えて、JavaScriptの「document.elementfrompoint」に似ており、正確なピクセルマッチングを取得できます。

セバスチャン

于 2012-10-25T10:30:01.490 に答える