2013-02-08 172 views
0

我有这样的地图:如何在google javascript maps api v3中更改标记位置?

.... 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方法的工作原理,并呈现地图和标记

但第二个不工作,没有按” t知道什么是

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

回答

0

存在不同的问题。

第一个会阻止代码执行:您的iinitialize函数没有返回值,因此您的maps变量未定义,并且没有方法changePosition

后来:在changePosition有争论,zy,但在函数内部访问的变量xy

不过,我没有看到修改xy任何代码,所以即使在代码将起作用,它没有任何可见的效果。


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); 
}); 
+0

我需要从'initialize'返回'maps'?但我在'changePosition'方法中再次定义它 – Patrioticcow

+0

是的,所有你在函数中定义的都是“私有”变量,因为你使用了var-keyword。这些变量在函数外部是不可见的,但setTimeout-callback在函数之外运行(在全局范围内) –

+0

我看到了,'marker'在'changePosition'方法中未定义, – Patrioticcow

相关问题