1

OpenLayers を使用して、レイヤーに OpenLayers.Control.SelectFeature をインストールし、hover オプションを true に設定しました。私が呼び出すレイヤーを作成するとき

<layer>.events.register("featureselected",...) 

<layer>.events.register("featureunselected",...)

ポップアップを作成および破棄する関数を登録します。これはすべてうまくいきます。ここで、マウスを複数の機能間で移動するときに現在発生しているポップアップのちらつきを避けるために、ポップアップが作成される前に少し遅延を追加したいと考えています。しかし、私はこれを行う方法を理解できないようです。遅延オプションを持つ OpenLayers.Handler.Hover ハンドラーを見つけましたが、それを SelectFeature コントロールと組み合わせる方法がわかりません (できれば)。

4

2 に答える 2

1

この投稿には貴重な情報が含まれていると思いますが、それを確認しようとしています。いくつかの答えはダウンし、誰かがちらつきについて話します。

編集:独自のラベルを作成している場合、labelOutlineWidthを上げると効果が小さくなることに気付きました。PointRadius 半径全体ではなく、ラベルの文字のみが「ホバー」としてカウントされるようです。ラベルのアウトラインを大きくしすぎると、ラベルはハエがフロントガラスにぶつかったように見えます (正方形ではなく、ラベルの輪郭、より具体的には文字に従います)。

更新:どうやらこれが、テキストラベルにカーソルを合わせると、これをチェックする理由です:ポインターイベントプロパティ。この属性 (pointerEvents: ) を OpenLayers.Style に設定し、値 'all' などを試してください。それは確かに私にとって違いをもたらします。

于 2012-10-09T20:26:44.530 に答える
0

機能の選択を少し異なる方法でバインドします。必要なものが得られる簡単な (テストされていない) 例を次に示します。

var timer,
delay = 500, //delay in ms
hover = new OpenLayers.Control.SelectFeature( <layer> , {

    hover: true,

    onSelect: function (feature) {

        // setup a timer to run select function
        timer = window.setTimeout(function () {

            // your select code

        }, delay);
    },

    onUnselect: function () {

        // first cancel the pending timer (no side effects)
        window.clearTimeout(timer);

        // your unselect code
    }

});

<map>.addControl(hover);

hover.activate();
于 2012-10-17T22:02:30.377 に答える