我正在使用新的mapbox.js API,特別是事件回調「panned」。當用戶移動地圖時,回調會被激發大約50-100次,這太多了。只有第一個和最後一個事件(或只有最後一個)才能得到這個最好的方法是什麼?檢測事件回調的開始和結束?
map.addCallback('panned', function(move) {
console.log('panned');
});
我正在使用新的mapbox.js API,特別是事件回調「panned」。當用戶移動地圖時,回調會被激發大約50-100次,這太多了。只有第一個和最後一個事件(或只有最後一個)才能得到這個最好的方法是什麼?檢測事件回調的開始和結束?
map.addCallback('panned', function(move) {
console.log('panned');
});
使用.setTimeout:
var timeout = null;
map.addCallback('panned', function (move) {
timeout && window.clearTimeout(timeout);
timeout = window.setTimeout(function() {
console.log('panned')
}, 100)
})
對於超時時間選擇合適的時間,你必須通過幾個值周圍擺弄找出來。
UnderscoreJS有幾個有用的功能。
Debounce可能是最適合於你,根據你的描述:...推遲執行,直到等待後,因爲它被調用最後一次毫秒已過
"Throttle"也有用的:「......只會在每等待幾毫秒的時間內最多一次調用原始函數一次,對速度限制事件發生的速度比您可以保持的速度快。」
HTH