//========================================================= // 地理位置 //========================================================= var EX_POS = {}; if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(pos) { // 成功回调函数,接受一个地理位置的对象作为参数。 // https://developer.mozilla.org/cn/docs/Web/API/Position 参数说明 var log = Math.round(pos.coords.longitude); var lat = Math.round(pos.coords.latitude); //alert(log + ' ' + lat); EX_POS.log = log; EX_POS.lat = lat; alert(EX_POS.lat); //有值 }, function(err) { // 错误的回调 // https://developer.mozilla.org/cn/docs/Web/API/PositionError 错误参数 }, { enableHighAccuracy: true, // 是否获取高精度结果 timeout: 5000, //超时,毫秒 maximumAge: 0 //可以接受多少毫秒的缓存位置 // 详细说明 https://developer.mozilla.org/cn/docs/Web/API/PositionOptions }); } else { alert('抱歉!您的浏览器无法使用地位功能'); } alert(EX_POS.lat); //Undefined
if (navigator.geolocation) { var EX_POS = navigator.geolocation.getCurrentPosition(function(pos) { // 成功回调函数,接受一个地理位置的对象作为参数。 // https://developer.mozilla.org/cn/docs/Web/API/Position 参数说明 var log = Math.round(pos.coords.longitude); var lat = Math.round(pos.coords.latitude); //alert(log + ' ' + lat); // EX_POS.log = log; // EX_POS.lat = lat; return { log,lat } }, function(err) { // 错误的回调 // https://developer.mozilla.org/cn/docs/Web/API/PositionError 错误参数 }, { enableHighAccuracy: true, // 是否获取高精度结果 timeout: 5000, //超时,毫秒 maximumAge: 0 //可以接受多少毫秒的缓存位置 // 详细说明 https://developer.mozilla.org/cn/docs/Web/API/PositionOptions }); } else { alert('抱歉!您的浏览器无法使用地位功能'); } alert(EX_POS.log); //log is undefined
你等一会在alert就可以用了哇,getCurrentPosition需要一定时间。
感谢回复,
延时我知道,但是在里面,每次都在秒内弹出,外面就不行了,刷新几次都是未知
获得lon,lat后,alert放在延迟函数里?
@Coca-code: 这个是js的事件循环,就算获取得快,也是最外层的alert先跑,至少第二轮才会到达异步函数内部。
@幻天芒: 嗯嗯,我有2问题:
1. 某个特定api获取并计算到的值可以在多处引用吗?这个值不停变化,引用到这个值的地方也不断变化?(我觉得不行,比如指南针由一个alpha的角值控制style的rotate,我alpha/2的值作用于另外一个elem,结果指南针死了,另外一个有效果)
2. 在函数作用域内的值如何全局使用?
我理解js事件循环,由内至外,一直到object,但好像找不到解决办法。
@Coca-code:
1、可以。
2、将该值赋值给全局变量,就可以全局使用了。
@幻天芒: 理解了,虽然没代码敲出来。。