滚动移动传单地图
Scroll to move Leaflet map
我一直在尝试不同的策略来制作一个由leaf驱动的地图平移,以与拖动相同的方式滚动,而不是缩放它。我可以通过更高级的DOM API来做到这一点,监听滚动事件和设置中心,但感觉不太好,也无法与拖动地图的流畅性相比。有没有一种方法可以通过滚动来移动地图,让它感觉像拖动一样平滑?
您可以调整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/
没有足够的声誉来评论,制作了ghybs's fiddle的衍生品,结合我对Rishat评论的理解:XY滚动传单
// based on https://stackoverflow.com/questions/38898519/scroll-to-move-leaflet-map
let m = document.querySelectorAll('#map')[0];
L.DomEvent.on(m, 'wheel', function(e) {
let x = e.deltaX;
let y = e.deltaY;
map.stop();
map.panBy([x, y]);
})
L.Map.ScrollWheelPan = L.Map.ScrollWheelZoom.extend({
_performZoom: function() {}
});
L.Map.addInitHook('addHandler', 'scrollWheelPan', L.Map.ScrollWheelPan);
var map = L.map("map", {
scrollWheelZoom: false,
scrollWheelPan: true
});
L.tileLayer("//stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.jpg").addTo(map);
map.setView([48.85, 2.35], 3);
相关文章:
- “可绘制地图”设置地图选项“纬度-经度”
- React.js 和 Mapbox:使用 react.js 时地图框地图无法正确渲染
- 谷歌地图:从地图元素中获取纬度和经度
- Redraw自定义谷歌地图javascript地图
- 地图单击阻止文档单击
- 谷歌地图 Z 索引地图不显示
- 点击地图任务地图时获取纬度/液化天然气
- 是否可以在单个HTML页面中包含多个传单/地图框地图
- 谷歌地图v3:地图没有显示
- Mapbox.GL:滚动放大和缩小到自定义地图框地图上的特定坐标
- 获取宽度(以公里为单位)的谷歌地图 API 地图
- 谷歌地图API - 地图未显示 - 没有错误
- 谷歌地图 - 当地图应该显示时,有时会发生“未定义”错误或地图为空白.如何预防
- 必应地图显示地图的左上角的北美
- 谷歌地图api:地图不一致执行fitBounds
- 谷歌地图v3-地图没有'我不想从mysqldb加载标记
- Fusion Tables&带侧边栏的地图:非洲地图样本中从数字到加密的ID
- 如何使用gmaps4rails中的谷歌地图关闭地图POI数据
- 谷歌地图地理地图区域代码API
- 无法在地图单击侦听器事件上显示另一个地图