首页 新闻 会员 周边 捐助

Javascript代码的小小疑问(74)——如何将HTML5 把获取到的经纬度全局使用?

0
悬赏园豆:5 [已解决问题] 解决于 2016-03-08 11:35
//=========================================================
//                      地理位置
//=========================================================
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
Coca-code的主页 Coca-code | 初学一级 | 园豆:10
提问于:2016-03-05 19:11
< >
分享
最佳答案
0

你等一会在alert就可以用了哇,getCurrentPosition需要一定时间。

收获园豆:5
幻天芒 | 高人七级 |园豆:37207 | 2016-03-05 19:55

感谢回复,

延时我知道,但是在里面,每次都在秒内弹出,外面就不行了,刷新几次都是未知

Coca-code | 园豆:10 (初学一级) | 2016-03-06 00:39

获得lon,lat后,alert放在延迟函数里?

 

Coca-code | 园豆:10 (初学一级) | 2016-03-06 11:29

@Coca-code: 这个是js的事件循环,就算获取得快,也是最外层的alert先跑,至少第二轮才会到达异步函数内部。

幻天芒 | 园豆:37207 (高人七级) | 2016-03-06 23:23

@幻天芒: 嗯嗯,我有2问题:

1. 某个特定api获取并计算到的值可以在多处引用吗?这个值不停变化,引用到这个值的地方也不断变化?(我觉得不行,比如指南针由一个alpha的角值控制style的rotate,我alpha/2的值作用于另外一个elem,结果指南针死了,另外一个有效果)

 

2. 在函数作用域内的值如何全局使用?

 

我理解js事件循环,由内至外,一直到object,但好像找不到解决办法。

Coca-code | 园豆:10 (初学一级) | 2016-03-07 09:49

@Coca-code:

1、可以。

2、将该值赋值给全局变量,就可以全局使用了。

幻天芒 | 园豆:37207 (高人七级) | 2016-03-08 09:10

@幻天芒: 理解了,虽然没代码敲出来。。

Coca-code | 园豆:10 (初学一级) | 2016-03-08 11:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册