将地图居中到else语句中的标记

时间:2014-03-05 20:29:53

标签: javascript google-maps-api-3

我有以下代码:

var setPresent = false;

[...]

google.maps.event.addDomListener(document.getElementById("getCoordinates"), 'click', function() {
    if(setPresent == false) {
        var coordinatesMarker = new google.maps.Marker({
        position: map.getCenter(),
        map: map,
        animation: google.maps.Animation.DROP,
        draggable: true    
        }); 
        setPresent=true;
    } else {
        map.setCenter(coordinatesMarker.getPosition());
        coordinatesMarker.setAnimation(google.maps.Animation.BOUNCE);
    }

  });

Marker只添加一次,但在此“else”块之后无效。其他说明有什么问题?

1 个答案:

答案 0 :(得分:1)

您的问题是您在函数var coordinatesMarker中创建了一个局部变量,该变量仅在响应该第一次单击事件时存活。它不是一个全局变量。那么当你再次单击你的元素时,else语句会被执行(对吗?)但是当你尝试coordinatesMarker.getPosition()时它不知道变量coordinateMarker是什么。

解决此问题的一种快速方法是在声明setPresent的同时使coordinateMarker成为全局变量。然后在您的事件监听器中,您要么创建新标记,要么更新其坐标。

像这样:

var setPresent = false;
var coordinatesMarker;
[...]

google.maps.event.addDomListener(document.getElementById("getCoordinates"), 'click', function() {
    if(setPresent == false) {
        coordinatesMarker = new google.maps.Marker({
        position: map.getCenter(),
        map: map,
        animation: google.maps.Animation.DROP,
        draggable: true    
        }); 
        setPresent=true;
    } else {
        map.setCenter(coordinatesMarker.getPosition());
        coordinatesMarker.setAnimation(google.maps.Animation.BOUNCE);
    }

  });