Javascript - 谷歌地图 - 将函数移交给marker.addListener(

时间:2016-07-14 03:49:14

标签: javascript google-maps

我有这段代码:

 this.createMarker = function(lat, lng, string) {

 var marker = new google.maps.Marker({
    map: map,
    animation: google.maps.Animation.DROP,
    position: new google.maps.LatLng(lat, lng),
    visible: true,

});

marker.addListener('click', function() {

    var contentstring = string;

    var infowindow = new google.maps.InfoWindow({
        content: contentstring
    });


    infowindow.open(map, marker);
    setTimeout(function() {
        infowindow.close();
    }, 3000);


    marker.setAnimation(google.maps.Animation.BOUNCE);

    setTimeout(function() {
        marker.setAnimation(null)
    }, 1400);



});
return marker;
}

在使用API​​结果构建数组时调用createMarker。

当我在代码中的不同位置使用infowindow和标记动画时,我决定将其封装起来:

this.clickMarker = function(string,map,marker) {

    var contentstring = string;

    var infowindow = new google.maps.InfoWindow({
        content: contentstring
    });


    infowindow.open(map, marker);
    setTimeout(function() {
        infowindow.close();
    }, 3000);


    marker.setAnimation(google.maps.Animation.BOUNCE);

    setTimeout(function() {
        marker.setAnimation(null)
    }, 1400);
  }

现在我尝试在marker.addListener

中调用该函数
marker.addListener('click', this.clickMarker(string,map,marker));

地图加载时,信息窗口和标记动画会正确加载。之后标记不会对点击做出反应。

我也试过这个

 marker.addListener('click', function() {
 this.clickMarker(string,map,marker);
  });

但它给我一个错误,即clickMarker未定义。 不知道为什么        marker.addListener(' click',this.clickMarker(string,map,marker)); 不起作用

1 个答案:

答案 0 :(得分:0)

有一些方法可以解决这个问题:

1.-从clickMarker返回一个函数。

this.clickMarker = function(string,map,marker) {
 return function() {
    var contentstring = string;

    var infowindow = new google.maps.InfoWindow({
      content: contentstring
    });


    infowindow.open(map, marker);
    setTimeout(function() {
      infowindow.close();
    }, 3000);


    marker.setAnimation(google.maps.Animation.BOUNCE);

    setTimeout(function() {
      marker.setAnimation(null)
    }, 1400);
  }
}

2.-将this值绑定到侦听器。

marker.addListener('click', function() {
   this.clickMarker(string,map,marker);
}.bind(this));