0

我想在OpenLayers 的zoomend事件的侦听器中执行一项非常密集的任务。

我认为使用像Ben Alman 的 jQuery Throttle-Debounce 插件之类的东西是谨慎的,以防止当用户连续快速单击缩放控件时此侦听器执行太多次。

所以我正在尝试如下代码,但它不起作用。zoomend侦听器回调中的$.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 回答