2

Open Layers (v2.12)を使用しており、 SelectFeatureを使用しようとしています。

私は物事を機能させることができましたが、興味深い動作で、「オーバー」コールバックが 2 回トリガーされるようです。ユーザーがポリゴンの上にカーソルを置いたときにツールチップを表示したいので、これは良くありません。コードをそのまま使用すると、ツールチップが 2 回追加され、せいぜいちらつきます。

更新:「over」コールバックが「selectStyle」ハイライトをオーバーライドすることにも気付きました。これは問題です。より良い解決策が得られるまで、over コールバックを削除しました。

選択機能のコード スニペットは次のとおりです...

var selectControl = new OpenLayers.Control.SelectFeature(vectorLayer, {
    hover: true,
    toggle: true,
    selectStyle: {
        fillOpacity: 0.5,
        fillColor: "#ffffff",
        strokeColor: "#ffffff",
        cursor: "pointer"
    },
    callbacks: {
        click: function(event){
            console.log("clicked");
        },
        over: function(event){
            console.log("mouse over");
        }
    }
})

map.addControl(selectControl);

selectControl.activate();

これを機能させるには、マップとベクター レイヤーを作成する必要があります。これは、誰かが本当にすべてを必要とする場合に追加できます。

要約すると、「オーバー」コールバックが複数回トリガーされないようにする方法を考え出す必要があります。

助けてくれてありがとう。

4

1 に答える 1

2

私が望むことを行う方法を発見しましたが、コールバックを追加するために2番目の構文を使用しているため、少し恐ろしいようです.レイヤーにハンドラーを追加する方法が複数ある理由がわかりません. うまくいけば、これは次のバージョンで取り上げられるでしょう。

これが、マウスオーバーハンドラーの修正を含む私のコードです...

var selectControl = new OpenLayers.Control.SelectFeature(vectorLayer, {
    hover: true,
    toggle: true,
    selectStyle: {
        fillOpacity: 0.5,
        fillColor: "#ffffff",
        strokeColor: "#ffffff",
        cursor: "pointer"
    },
    callbacks: {
        click: function(event){
            console.log("clicked");
        }
        //removed 'over' callback
    },
    //here is the extra handler.
    eventListeners: {
        featurehighlighted: function(event){
            console.log("mouse over");
        }
    }
})

map.addControl(selectControl);

selectControl.activate();

したがって、これは 1 回だけトリガーされますが、ご覧のとおり、マウス イベント タイプ ハンドラーを追加するための 2 つのバリアントがあります。

素晴らしい解決策とは思えないので、これを私の答えとしてチェックしたくありません。

更新: 誰も代替案を思い付いていないので、私は自分の答えを受け入れることを余儀なくされていると思いますが、気にしないでください.

于 2013-01-04T13:34:23.673 に答える