我有这段代码:
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)); 不起作用
答案 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));