2016-08-04 66 views
0

我正在使用google maps api的項目。我希望用戶擁有的一個功能是能夠通過長按/單擊添加標記,但前提是地圖尚未移動(即中心保持不變)。使用Javascript來檢查地圖中心是否移動了移動設備

//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。如果超時完成而沒有釋放它,那麼它將調用一個函數,該函數首先檢查地圖的當前中心與事件開始時設置的地圖中心,如果它們是相同的標記,則不執行任何操作。

這工作正常在我的桌面上,但總是讀取中心,因爲我的手機上是相同的,我不明白爲什麼。

任何想法,爲什麼這可能會在桌面上,但不是在移動?

回答

1

你應該攔截

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

感謝您的快速響應!我補充說,但它仍然只能在桌面上運行。無法完全說明,但我不確定Google Maps API是否會在移動中釋放手指之前註冊中心更改,即使它立即在桌面上註冊 – SomeSchmo

0

所以它出現在谷歌地圖API是有點違反直覺的,當涉及到移動VS桌面。對於桌面,只要地圖移動,它就會在中心註冊一個更改,但直到您將手指擡起移動後纔會註冊。爲了解決這個問題我最後用「拖拽」監聽器,因爲它不立即註冊,這兩個平臺上

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

感謝@scaisEdge了最初的想法。