我正在尝试在填充 100% 页面的布局上实现 MapBox。我已经禁用了地图缩放选项,但是当尝试在地图填充视口的触摸设备上滚动时出现问题。我可以覆盖它还是让浏览器将其视为图像?
6 回答
是的,您可以通过将传单函数设置为不执行任何操作来阻止 Mapbox 侦听器阻止默认操作:
L.DomEvent.preventDefault = function(e) {return;}
要删除浏览器放置在元素周围的轮廓,否则会被阻止,您可以添加:
*:focus {
outline: none;
-webkit-tap-highlight-color: rgba(255, 255, 255, 0);
-webkit-focus-ring-color: rgba(255, 255, 255, 0) !important;
}
这允许我在触摸设备上滚动,尽管我只在 Android 上进行了测试。请注意,这可能会对您的应用程序产生其他后果 - 可以通过进入 mapbox.js 并仅从您需要的侦听器中删除此调用来防止这些后果。
此示例已改进:缺少的行是:
if (map.tap) map.tap.disable();
这将防止地图杀死触摸设备上的点击事件。
像本例中那样删除其余的侦听器 - 您可能仍然拥有的是dragging
.
通过 CSS 的简单解决方案:pointer-events: none;
对于那些想要根据页面大小(就像我所做的那样)动态启用/禁用地图框滚动/缩放等的人,您可以尝试:
$(document).ready(function() {
$(window).on('resize', updateMap);
});
function updateMap() {
var width = $(window).width();
if (width < 768) {
map.scrollWheelZoom.disable();
map.doubleClickZoom.disable();
map.dragging.disable();
if (map.tap) map.tap.disable();
}
else {
map.scrollWheelZoom.enable();
map.doubleClickZoom.enable();
map.dragging.enable();
if (map.tap) map.tap.enable();
}
}
将 768 替换为适合您布局的幻数。假设 jQuery。
mapbox 中参数的问题dragging
在于,它既控制使用鼠标或其他指针设备的单击并按住拖动,也控制使用触摸的滑动运动拖动。不确定其他任何答案是否将其作为主要问题进行了澄清。
我认为OP遇到的问题的核心是我们都喜欢点击拖动并认为它很容易使用,但我们不喜欢触摸拖动,因为它会干扰滚动整个页面的能力.
这是我最终使用的代码行。它依赖于 Modernizr 和 jQuery,但如果需要,你可以在没有它们的情况下编写类似的东西。
// disable dragging the map on touch devices only
if ($('html').hasClass('touch')) map.dragging.disable();