2016-08-11 32 views
0

我一直在嘗試使用不同的策略來製作Leaflet供電的地圖平移滾動,就像它在拖動時一樣,而不是縮放它。我可以通過更高級別的DOM API來完成這項工作,聽取滾動事件和設置中心的內容,但它既不感覺良好,也不會與拖動地圖的平滑性相媲美。有沒有什麼辦法通過滾動來移動地圖,通過拖動來感覺平滑?滾動移動傳單地圖

回答

2

您可以修改L.Map.ScrollWheelZoom處理程序來執行地圖平移而不是縮放。

L.Map.ScrollWheelPan = L.Map.ScrollWheelZoom.extend({ 
    _performZoom: function() { 
    var map = this._map, 
     delta = this._delta; 

    map.stop(); // stop panning and fly animations if any 

    delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta); 
    delta = Math.max(Math.min(delta, 4), -4); 

    this._delta = 0; 
    this._startTime = null; 

    if (!delta) { 
     return; 
    } 

    map.panBy([0, -delta * 40]); // Adjust 40 to your feeling. 
    } 
}); 

L.Map.addInitHook('addHandler', 'scrollWheelPan', L.Map.ScrollWheelPan); 

var map = L.map("map", { 
    scrollWheelZoom: false, 
    scrollWheelPan: true 
}); 

演示:https://jsfiddle.net/3v7hd2vx/67/

+0

您的解決方案只允許向上或向下滾動,但使用'賽事#wheelDeltaX'和'事件#wheelDeltaY',有可能使泛在任何方向滾動,並感覺非常流暢。感謝您的想法,它幫助了很多! –