【问题标题】:Javascript to check if center of map has moved not working on mobile用于检查地图中心是否已移动的 Javascript 无法在移动设备上运行
【发布时间】:2016-08-05 04:01:10
【问题描述】:

我正在开发一个使用 google maps api 的项目。我希望用户拥有的一项功能是能够通过长按/单击添加标记,但前提是地图没有移动(即中心保持不变)。

//event listener
google.maps.event.addListener(map, 'mousedown', function(event){
  //current center
  var centerPoint = map.getCenter();
  var latLng = event.latLng;

  //timeout function
  var counter = setTimeout(function(){
    //function called
    setPressedLocationMarker(latLng, centerPoint);
  }, 1500);

  google.maps.event.addListener(map, 'mouseup', function(){
    clearTimeout(counter)
  });
});


//function in question
function setPressedLocationMarker(latLng, centerPoint) {
  if (centerPoint == map.getCenter()) {
    //DO STUFF
  }
}

为此,我为获得当前中心的 mousedown 事件添加了一个事件侦听器,并启动了 Timeout。如果超时在没有释放它们的情况下完成,那么它将调用一个函数,该函数首先检查地图的当前中心与事件开始时设置的中心,如果它们相同,则设置一个标记,否则什么也不做。

这在我的桌面上运行良好,但在我的手机上总是将中心读取为相同,我不知道为什么。

任何想法为什么这可能适用于桌面而不是移动设备?

【问题讨论】:

    标签: javascript google-maps mobile


    【解决方案1】:

    你应该拦截

     google.maps.event.addListener(map, 'center_changed', function(){
        // set a  global var for avoid the adding of the marker 
    });
    

    【讨论】:

    • 感谢您的快速回复!我添加了它,但它仍然只适用于桌面。不太清楚,但我不确定 Google Maps API 是否会在您释放移动手指之前注册中心更改,即使它会立即在桌面上注册
    【解决方案2】:

    因此,对于移动设备和桌面设备,Google Maps API 似乎有点违反直觉。对于台式机,它会在地图移动后立即注册中心更改,但是直到您抬起手指后才会注册它。为了解决这个问题,我最终使用了一个“拖动”监听器,因为它会立即在两个平台上注册

    sameCenter = true;
    google.maps.event.addListener(map, 'drag', function(){
      sameCenter = false;
    });
    

    感谢@scaisEdge 最初的想法。

    【讨论】:

      猜你喜欢
      • 2017-01-29
      • 2022-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-30
      • 2017-01-28
      • 2016-08-17
      • 1970-01-01
      相关资源
      最近更新 更多