2016-10-16 5 views
0

Realistisch möchte ich nur einen Weg, um später wie eine globale Variable auf die Breite und Länge zuzugreifen. Ich habe diese "Lösung" gefunden, wenn Sie es so nennen können. Es ist schon eine Weile her, seit ich OOP gemacht habe.Javascript-Objekte und der globale Geltungsbereich?

Was muss ich tun?

var geo = { 

    local: function() { 
    if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(function(postition){ 
     latitude: position.coords.latitude; 
     longitude: position.coords.longitude; 
    }) 
    } 
} 
}; 

function initMap() { 
    var userLocation = {lat: geo.local.latitude, lng: geo.local.longitude}; 
    var map = new google.maps.Map(document.getElementById('map'), { 
    zoom:14, 
    center: userLocation 
    }); 
}; 

console.log(geo.local.longitude); 
console.log(geo.local.latitude); 

Vielen Dank!

Antwort

1

Man könnte so etwas tun:

var geo = { 
 
    local: { 
 
    longitude: "", 
 
    latitude: "", 
 
    positionFound: false 
 
    }, 
 
    location: (function() { 
 

 
    if (navigator.geolocation) { 
 
     navigator.geolocation.getCurrentPosition(function(position) { 
 
     geo.local.latitude = position.coords.latitude; 
 
     geo.local.longitude = position.coords.longitude; 
 
     geo.local.positionFound = true; 
 
     }); 
 
    } 
 
    })() 
 
}; 
 

 
function initMap() { 
 
    var userLocation = { 
 
    lat: geo.local.latitude, 
 
    lng: geo.local.longitude 
 
    }; 
 
    if (geo.local.positionFound) { 
 
    console.log(userLocation.lat + " - " + userLocation.lng); 
 
    } else { 
 
    console.log("Location Not found"); 
 
    } 
 
}; 
 

 
setTimeout(function() { 
 
    initMap(); 
 
}, 5000);

Ein Arbeits Schnipsel auf jsFiddle ist, als Code-Schnipsel scheint nicht Standort Zugriff zu ermöglichen.

+0

ich würde es lieben, wenn Sie in der Lage sind, mich zu Fuß durch sie ganz schnell ! – Quesofat

+1

Grundsätzlich wäre es eine einfache Lösung gewesen, wenn die Geolokation api nur eine synchrone Methode wäre. Aufgrund der Tatsache, dass getCurrentPosition eine asynchrone Methode ist. Wir müssen warten, bis die Methode abgeschlossen ist und der erfolgreiche Rückruf ausgeführt wird. also muss jemand die Async-API aufrufen und das ist, wenn IIFEs nützlich sind. Sie rufen die Methode unmittelbar nach der Deklaration auf. geo.location ist ein Beispiel für IIFE. Aber gemäß Ihrer Anfrage wollten Sie, dass die Position als Variable verfügbar ist, wir müssen sie in einigen Eigenschaften aktualisieren, auf die wir zugreifen können. – Sreekanth

+1

Daher geo.local. Außerdem müssen wir sicherstellen, dass die Position korrekt ausgefüllt wurde, wir müssen sicher sein, dass getCurrentPosition erfolgreich ausgeführt wird und daher den locationFound als Gatekeeper verwendet, um sicherzustellen, dass wir die richtigen Positionswerte haben. Dies könnte nützlich sein, wenn Sie nur dann etwas ausführen möchten, wenn die Positionswerte gefunden werden. In Ihrem Fall, Google Maps-Objekt erstellen. – Sreekanth

Verwandte Themen