2013-02-08 214 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

相關問題