Javascript 在手机上的Google Maps JS API v3中,我如何区分点击和拖动?

Javascript 在手机上的Google Maps JS API v3中,我如何区分点击和拖动?,javascript,jquery,google-maps-api-3,Javascript,Jquery,Google Maps Api 3,我正在用Bootstrap、jQuery和googlemapsv3api构建一个支持移动的HTML5站点 我已经理解了大部分代码,我希望能够单击,添加一个标记,HTTP将该位置发布到服务器(用于存储它) 起初,我很难让安卓看到触摸屏上应该有点击 if ($.browser.mobile) { google.maps.event.addListener(map, 'mousedown', function(event) { placeMarker(event.

我正在用Bootstrap、jQuery和googlemapsv3api构建一个支持移动的HTML5站点

我已经理解了大部分代码,我希望能够单击,添加一个标记,HTTP将该位置发布到服务器(用于存储它)

起初,我很难让安卓看到触摸屏上应该有点击

if ($.browser.mobile) {
        google.maps.event.addListener(map, 'mousedown', function(event) {
           placeMarker(event.latLng);
        });

} else { 

  google.maps.event.addListener(map, 'click', function(event) {
     placeMarker(event.latLng);
  });

}
}
我正在使用jQuery代码执行
$.browser.mobile
操作

我遇到的问题是,如果我单击地图,拖动它,然后移动到移动设备上的其他位置,它会调用placeMarker(),这是可以理解的,如果令人不快的话,因此拖动地图的过程会创建标记(并发布到服务器)


有没有什么方法可以检测到是否发生了拖动,这样我就可以告诉它不要麻烦做placeMarker和POST?

我宁愿使用
dragstart、dragend、drag
事件,而不是mousedown事件。
如果不影响要呈现给用户的用户体验,也可以将click替换为dblclick。我不知道“单击”如何与“拖动”事件交互。

看看这样的代码是否适用于您:

google.maps.event.addListener(map, 'mousedown', function(event) {

  var initPoint = {x: event.pageX, y: event.pageY}, 
      toBeCanceled = false, 
      latLong = event.latLong;

    google.maps.event.addListener(map, 'mousemove', function(event) {
       var newPoint = {x: event.pageX, y: event.pageY};

       // if newPoint has moved beyond expected limits
       toBeCanceled = true
    });  

    google.maps.event.addListener(map, 'mouseup', function(event) {

      if (toBeCanceled) {
        event.preventDefault() // event.stop() seems to work as commented by OP
      } else {
        placeMarker(event.latLng);
      }

      // Unregister mousemove and mouseup
    });

});

在mousedown上注册mousemove事件。如果鼠标移动超出thresold do event.preventDefault对mouseup事件的限制。@closure您能再解释一下注册事件的含义吗?@closure的意思是在地图上为鼠标向下创建一个监听器(addListener)。在这个处理程序中,在允许对服务器进行调用之前,检查鼠标是否移动了一些。如果鼠标落在与鼠标落下(或大约落下)相同的位置,则表示没有拖动。虽然,据我所知,GMAPSAPI中有“拖动”事件……双击很糟糕。尤其是在移动设备上。我必须将
事件.preventDefault()
更改为
事件.stop()
,但现在它可以工作了:)