0

OpenLayersのzoomendイベントのリスナー内でかなり集中的なタスクを実行したいと思います。

ユーザーがズームコントロールを連続して非常にすばやくクリックしたときにこのリスナーが何度も実行されないようにするには、BenAlmanのjQueryThrottle-Debounceプラグインのようなものを使用するのが賢明だと思いました。

だから私は次のようなコードを試していますが、うまくいきません。ズームエンドリスナーコールバック内の$.debounce()のコールバックは、実行されません。デバウンス機能を削除したかどうかを確認するために、zoomendのリスナーコールバックが実行されます。

    map = new OpenLayers.Map('map',{
        eventListeners: {
            zoomend: function(event) {
                //execute 300ms after user stops zooming
                $.debounce(300,function(event) {
                    //..computationally intensive task
                });
            }
        }
    });

私は何が間違っているのですか?

そして、私はデバウンスを気にする必要がありますか?

4

1 に答える 1

2

$.debounce() を間違って使用していたことがわかりました。修正されたコードは次のとおりです。

map = new OpenLayers.Map('map',{
    eventListeners: {
        'zoomend': $.debounce(1000,function() {
            //..computationally intensive task
        })
    }
});

これについてコメントするだけで、デバウンスを使用することは有益だと思いますが、このようなことがまだ文書化されていないことに驚いています。ズームするとき、ユーザーはズーム ボタンをすばやくクリックする傾向があり、多くの場合、新しいズーム レベルでの再描画は、新しいズーム レベルの値と解像度を使用した計算に依存します。したがって、ユーザーがズームを停止した後にのみ、これらの計算を行うことが意味を成します。これはパニングにも当てはまると思います。

于 2012-10-05T07:05:29.890 に答える