当dragging
被禁用时,我希望在ios上拖动地图时页面会滚动。 相反,什么也没有发生。 在android上,如果dragging = false,我可以通过拖动来滚动。
在ios上,在地图上拖动时无法滚动页面:
https://jsfiddle.net/geg8yLe3/
这类似于#5343
这听起来很像#4051,应该已经在#4552中修复了。 让我们看看为什么该修复程序现在不起作用。
我在Android设备上尝试了该提琴,该提琴可以按预期工作,并且启用拖动也可以按预期工作,因此它看起来像是iOS特定的错误。
查看http://caniuse.com/#feat = css-touch-action,似乎iOS仅部分支持touch-action
,这可能是此问题的原因。
在链接的小提琴中,地图上有touch-action: pan-x pan-y;
-解决此特定问题的方法是为iOS设置touch-action: auto;
。 @oberhamsi您能否验证在当前(https://github.com/Leaflet/Leaflet/blob/364bc7773568070aad596d58001018b0f0b6bb62/dist/leaflet.css#L54)之前添加额外规则touch-action: auto
的问题是否已解决? 在这种情况下,将欢迎公关。
可悲的是它没有帮助:我更新了小提琴,在.leaflet-touch-zoom
上设置了touch-action:auto
.leaflet-touch-zoom
。 然后我还设置pointer-event:auto
的.leaflet-tile-container
,但仍然没有效果。
https://jsfiddle.net/geg8yLe3/6/
事件处理程序之一可以做preventDefault吗?
@oberhamsi嗯,这很奇怪。
关于preventDefault
,一旦禁用拖动处理程序,就不应有任何侦听器,因为在这种情况下L.Draggable
被禁用并注销其侦听器。
@oberhamsi ,如果您能深入研究并尝试调试正在发生的事情,那将很有趣,但是不幸的是,我无法轻松访问任何iOS设备。
有没有解决的办法? 仍然有这个问题。
@GeorgeColdham可悲的是,没有。 正如我在上一条评论中提到的那样,由于无法轻松访问任何要测试的iOS设备,我陷入了困境,因为它确实可以在Android上正常工作。
我们需要检查iOS上触发了哪些CSS规则或事件处理程序,从而阻止了地图滚动,因此,我们将不胜感激!
我也有同样的问题。 我在IOS中使用webview。 但是,如果没有Web预览,也会出现问题。 我在chrome和safari上进行了测试。 我的设备是iPhone 4s
你好
我可以使用本地android浏览器“ com.android.browser”重现此内容。
用户代理:
Mozilla/5.0 (Linux; Android 5.0.2; LG-D802/V30f Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/34.0.1847.118 Mobile Safari/537.36
Google Maps JS SDK具有与iOS / Android相同的功能。 据我所见,它无需触摸即可工作。 知道他们是怎么做的吗?
@perliedman我认为根本的问题是这里的touchstart
处理程序中的preventDefault
: https :
如果我删除了它(或在选项中添加了tap = false),它将在iOS上运行。 该问题也会在版本55之前的Android上的Chrome中出现(Chrome自版本55起支持指针事件,然后在Leaflet中使用不同的代码路径)。 如果您在Android设备上转到chrome:// flags并将指针事件设置为Disabled
,则可以进行检查。
@herrernst呵呵,很好的分析! 谢谢!
绝对是导致此的轻敲处理程序。 查看我们在#4051中使用的测试代码,实际上我们有tap: false
。
因此,目前,解决方法是不仅设置dragging: false
而且还要设置tap: false
以实现所需的行为。
我已经提交了#5670来解决这个问题,因此除非有模拟事件的处理程序,否则我们不会preventDefault
作为模拟事件的源。
@perliedman感谢您的响应和补丁!
至少在最新的beta版本的Firefox 2上可以在android(7.0)上重现
我可以确认以下代码似乎是一种有效的解决方法,可确保一个手指滚动页面而不是地图,同时仍允许两指缩放和平移地图以及点击标记。 当地图是需要滚动的较大页面的一部分时,这可以提高移动设备的可用性。
L.map('map', {
dragging: !L.Browser.mobile,
tap: !L.Browser.mobile
})
已在iOS 10 Safari和Chrome中确认。 尚未在Android上进行全面测试。
我还确认它可以在iOS 11.3.1中使用,同时适用于Safari和Chrome 66
并在android chrome 66上
@SimonEast似乎可以在Android上的移动FireFox中很好地工作,Chrome不太喜欢它。 放大整个网站。 iOS(11.4)Safari和FF运作良好。 我尝试了4或5种不同的CSS / JS技巧,最后,这一技巧开箱即用。 谢谢。
有人找到解决方案了吗?
我将dragging
和tap
为false
,但仍然无法正常工作。
我将
dragging
和tap
为false
,但仍然无法正常工作。
@HlaingTinHtun
可能是您的情况与所讨论的不同。 请提供样本小提琴以使我们重现您的问题。
因此它看起来像是iOS特定的错误。
我可以确认不是。
相同的做法在Firefox 68.6的Android上可重现,似乎是由L.Map.Tap
。 如已报道。
最有用的评论
我可以确认以下代码似乎是一种有效的解决方法,可确保一个手指滚动页面而不是地图,同时仍允许两指缩放和平移地图以及点击标记。 当地图是需要滚动的较大页面的一部分时,这可以提高移动设备的可用性。
已在iOS 10 Safari和Chrome中确认。 尚未在Android上进行全面测试。