0

我有这张地图:

.... class Maps .... 

Maps.prototype.initialize = function (x, y) {
    var latitude = x;
    var longitude = y;

    var mapOptions = {
        zoom: 8,
        center: new google.maps.LatLng(latitude, longitude),
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    var map = new google.maps.Map(document.getElementById('map_canvas'),  mapOptions);

    var marker = new google.maps.Marker({
        position: map.getCenter(),
        map: map,
        title: 'Click to zoom'
    });
};

Maps.prototype.changePosition = function (x, y) {

    var latitude = x;
    var longitude = y;

    var map = new google.maps.LatLng(latitude, longitude);
    marker.setPosition(map);
}

....

然后:

var maps = new Maps();
var marker = maps.initialize(x, y);

window.setTimeout(function() {
    maps.changePosition(x, y));
}, 3000);

initialize方法有效,并呈现地图和标记

但是第二个不起作用,不知道是setPosition什么

关于这个问题的任何想法?

4

1 回答 1

0

有不同的问题。

第一个,这将阻止代码执行:您的 iinitialize-function 没有返回值,因此您的maps-variable 未定义并且没有方法changePosition

稍后:changePosition 有参数 ,zy, 但是在函数内部你可以访问变量xy

但是,我没有看到任何修改xandy的代码,因此即使代码可以工作,它也没有任何可见的效果。


function Maps(){}

Maps.prototype.initialize = function (x, y, z, o) {

    this.center    = new google.maps.LatLng(x, y)
    this.zoom      = z;
    this.node      = document.getElementById(o);
    this.markers   = [];

    var mapOptions = {
        zoom:       this.zoom,
        center:     this.center,
        mapTypeId:  google.maps.MapTypeId.ROADMAP
    };

    this.map = new google.maps.Map(this.node,  mapOptions);

    return this;
};

Maps.prototype.addMarker=function(x, y, t , c){

  var marker = new google.maps.Marker({
        position: new google.maps.LatLng(x,y),
        map: this.map,
        title: t||'Click to zoom'
    });

  this.markers.push(marker);
  if(c)this.map.setCenter(marker.getPosition());
  return marker;
}

Maps.prototype.changePosition = function (m , x, y, c, f) {

    var latLng = new google.maps.LatLng(x, y);
    m.setPosition(latLng);
    if(c)this.map.setCenter(latLng);
    if(f)f();
}

//create the Maps-instance
var maps = new Maps(),
    x = 10,
    y = 10;

//do something onload
google.maps.event.addDomListener(window,'load',function(){
  //initialize maps
  maps.initialize(x, y , 3, 'map_canvas');

  //add a marker
  var marker=maps.addMarker(x, y ,'hello marker', true);

  //change position of marker
  window.setTimeout(function() {
    maps.changePosition(marker, x+50, y+50 ,true,
                        function(){alert('position changed');});
}, 5000);
});
于 2013-02-08T01:15:28.773 回答