Javascript zoomBox时也会触发map.on(';单击';,onClick)
我已经定义了一个Javascript zoomBox时也会触发map.on(';单击';,onClick),javascript,leaflet,Javascript,Leaflet,我已经定义了一个map.on('click',onClick)事件,但当有人使用zoomBox处理程序(Shift+draw zoom box)时,它也会触发 e.type始终为“单击” 我正在使用传单版本0.5.1 我怎样才能避免这种情况 提前谢谢我想你发现了一个bug!我发现这个bug只出现在IE10中,而且不仅是0.5.1,而且0.6也有同样的问题。你可以去 现在,您可以临时跟踪mousedown点,并与单击点进行比较,以确定光标是否移动 var mousedownPoint; // gl
map.on('click',onClick)
事件,但当有人使用zoomBox处理程序(Shift+draw zoom box)时,它也会触发
e.type
始终为“单击”
我正在使用传单版本0.5.1
我怎样才能避免这种情况
提前谢谢我想你发现了一个bug!我发现这个bug只出现在IE10中,而且不仅是0.5.1,而且0.6也有同样的问题。你可以去 现在,您可以临时跟踪
mousedown
点,并与单击点进行比较,以确定光标是否移动
var mousedownPoint; // global
map.on('mousedown', function (e) {
mousedownPoint = e.containerPoint;
});
map.on('click', function (e) {
if (!e.containerPoint.equals(mousedownPoint)) {
return;
}
// DO WHAT YOU WANT
});
你能把它改成使用mousedown和mouseup吗?然后让它们都编辑一个变量,计算出向下和向上之间的时间,如果时间不太长,启动click函数?如果这有道理的话,我想问题在于点击是通过zoomBox处理程序的。尝试将单击侦听器添加到缩放处理程序并添加StopRopagation()。使用jQuery:$('#zoombox')。在('click',函数(e){e.stopPropagation()})上;我上面的回答应该是可行的,但这有点像黑客,因为这种行为在通过控制台添加click事件后不会发生。您是否可能以某种方式更改了“map”变量以引用包含的div而不是map元素本身?你有到JSFIDLE的链接吗?@SmokeyPHP有太多的依赖性……这太棒了!但是要使用equals函数,您必须传递一个latlng作为参数,因此代码(已测试)的工作方式如下所示。在我看来,这个bug也出现在Firebug和Chrome的最新版本中。var mousedownPoint;//全局映射.on('mousedown',函数(e){mousedownPoint=e.latlng;});map.on('click',函数(e){if(!e.latlng.equals(mousedownPoint)){return;}//做你想做的事});
var mousedownPoint; // global
map.on('mousedown', function (e) {
mousedownPoint = e.containerPoint;
});
map.on('click', function (e) {
if (!e.containerPoint.equals(mousedownPoint)) {
return;
}
// DO WHAT YOU WANT
});