navigator.geolocation.getCurrentPosition(successCallback);
function successCallback(position){
var lat = position.coords.latitude;
var long = position.coords.longitude;
}
var map;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: lat, lng: long},
zoom: 8
});
}
</script>
<script src="https://maps.googleapis.com/maps/api/js?key=xxx&callback=initMap"
async defer></script>
更新代碼~
這樣要怎麼把lat跟long 丟到initMap?
在successCallback裡面呼叫initMap不就好了...
navigator.geolocation.getCurrentPosition(successCallback);
function successCallback(position){
var lat = position.coords.latitude;
var long = position.coords.longitude;
initMap(lat,long);
}
var map;
function initMap(lat,long) {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: lat, lng: long},
zoom: 8
});
}
asys0512
改了...
怪了他說:InvalidValueError: setCenter: not a LatLng or LatLngLiteral: in property lat: not a number
大大您好,您標題下”全域(局)變數失敗“
可我在您的程式碼中沒看到全域變數
successCallback 中您宣告兩個“區域變數”
所以在initMap 中您想使用lat 和long 兩個變數找不到是正常的!
這是“區域(Scope)”不同導致的結果
小弟不只是想幫您解決問題
想幫您建立正確的“全域變數(golbal)”和“區域變數(local)”觀念
這題解法通常有兩種
一種H大已經提供是function call function的做法
一種就是正確的宣告全域變數並使用它(如下)
//宣告全域變數lat, long, map
var lat, long, map;
navigator.geolocation.getCurrentPosition(successCallback);
function successCallback(position){
//把座標經緯度assign到全域變數
lat = position.coords.latitude;
long = position.coords.longitude;
initMap(lat,long);
}
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
//使用全域變數中的lat, long
center: {lat: lat, lng: long},
zoom: 8
});
}