zoukankan      html  css  js  c++  java
  • HTML5新特性之移动设备API

    为了更好地为移动设备服务,HTML5推出了一系列针对移动设备的API。

    1、Geolocation API

    Geolocation接口用于获取用户的地理位置。它使用的方法基于GPS或者其他机制(比如IP地址、WIFI热点等)。

    下面的方法,可以检查浏览器是否支持这个接口。

    if (navigator.geolocation) {
        // 支持
    } else {
        //不支持
    }

    1.1 getCurrentPosition方法

    getCurrentPosition方法,用来获取用户的地理位置。使用它需要得到用户的授权,浏览器会跳出一个对话框,询问用户是否许可当前页面获取他的地理位置。必须考虑两种情况的回调函数:一种是同意授权,另一种是拒绝授权。如果用户拒绝授权会抛出一个错误。

    navigator.geolocation.getCurrentPosition(geoSuccess, geoError);

    上面代码指定了处理当前地址位置的两个回调函数。

    (1)同意授权

    如果用户同意授权,就会调用geoSuccess。

    function geoSuccess(event) {
        var coords = event.coords;
        console.log('latitude: ' + coords.latitude);    //纬度
        console.log('longitude: ' + coords.longitude);    //经度
        console.log('accuracy: ' + coords.accuracy);    //精度
        console.log('altitude: ' + coords.altitude);    //海拔
        console.log('altitudeAccuracy: ' + coords.altitudeAccuracy); //海拔精度(单位:米)
        console.log('heading: ' + coords.heading);    //以360度表示的方向
        console.log('speed: ' + coords.speed);    //每秒的速度(单位:米)
    }

    geoSuccess的参数是一个event对象。event.coords属性指向一个对象,包含了用户的位置信息,主要是以下几个值:

    • coords.latitude:纬度
    • coords.longitude:经度
    • coords.accuracy:精度
    • coords.altitude:海拔
    • coords.altitudeAccuracy:海拔精度(单位:米)
    • coords.heading:以360度表示的方向
    • coords.speed:每秒的速度(单位:米)

    (2)拒绝授权

    如果用户拒绝授权,就会调用geoError。

    function geoError(event) {
        console.log('Error code ' + event.code + '. ' + event.message);
    }

    geoError的参数也是一个event对象。event.code属性表示错误类型,有四个值:

    • 0:未知错误,浏览器没有提示出错的原因,相当于常量event.UNKNOWN_ERROR。
    • 1:用户拒绝授权,相当于常量event.PERMISSION_DENIED
    • 2:没有得到位置,GPS或其他定位机制无法定位,相当于常量event.POSITION_UNAVAILABLE。
    • 3:超时,GPS没有在指定时间内返回结果,相当于常量event.TIMEOUT。

    event.message为错误提示信息。

    (3)设置定位行为

    getCurrentPosition方法还可以接受一个对象作为第三个参数,用来设置定位行为。

    var option = {
        enableHighAccuracy: true,
        timeout: Infinity,
        maximumAge: 0
    };
    
    navigator.geolocation.getCurrentPosition(geoSuccess, geoError, option);

    这个参数对象有三个成员:

    • enableHighAccuracy:如果设为true,就要求客户端提供更精确的位置信息,这会导致更长的定位时间和更大的耗电,默认设置为false。
    • timeout:等待客户端做出回应的最大毫秒数,默认值为Infinity(无限)。
    • maxinumAge:客户端可以使用缓存数据的最大毫秒数。如果设为0,客户端不读取缓存;如果设为infinity,客户端只读取缓存。

    1.2 watchPosition方法和clearWatch方法

    watchPosition方法可以用来监听用户位置的持续改变,使用方法与getCurrentPosition方法一样。

    var watchID = navigator.geolocation.watchPosition(geoSuccess, geoError);

    一旦用户位置发生改变,就会调用回调函数。

    如果要取消监听,则使用clearWatch方法。

    navigator.geolocation.clearWatch(watchID);

    2、Vibration API

    Vibration接口用于在浏览器中发出命令,使得设备振动。由于该操作很耗电,在低电量时最好取消该操作。

    使用下面的代码检查该接口是否可用。目前,只有Chrome和Firefox的Android平台最新版本支持它。

    navigator.vibrate = navigator.vibrate ||
                                   navigator.webkitVibrate ||
                                   navigator.mozVibrate ||
                                   navigator.msVibrate;
    
    if (navigator.vibrate) {
        // 支持
    }

    vibrate方法可以使得设备振动,它的参数就是振动持续的毫秒数。

    navigator.vibrate(1000);

    上面的代码使得设备振动1秒钟。

    vibrate方法还可以接受一个数组作为参数,表示振动的模式。偶数位置的数组成员表示振动的毫秒数,奇数位置的数组成员表示等待的毫秒数。

    navigator.vibrate([500, 300, 500]);

    上面代码表示,设备先振动500毫秒,然后等待300毫秒,再接着振动500毫秒。

    vibrate是一个非阻塞式的操作,即手机振动的同时,JavaScript代码继续向下运行。要停止振动,只有将0毫秒传入vibrate方法。

    navigator.vibrate(0);

    3、亮度调节

    当移动设备的亮度传感器,感知外部亮度发生显著变化时,会触发devicelight事件。目前,只有Firefox布署了这个API。

    window.addEventListener('devicelight', function(event) {
        console.log(event.value + 'lux');
    })

    下面代码表示,devicelight事件的回调函数,接受一个事件对象作为参数。该对象的value属性就是亮度值。

    这种API的一种应用是,我们可以针对亮度的强弱来改网页背景和文字颜色。

    4、参考链接

    [1] Ryan Stewart, Using the Geolocation API

    [2] Rathnakanya K. Srinivasan, HTML5 Geolocation

    [3] Craig Buckler, How to Use the HTML5 Vibration API

    [4] Tomomi Imura, Responsive UI with Luminosity Level

    [5] Ruanyf, 移动设备API

  • 相关阅读:
    Design Pattern: Gof
    ZT --- extern "C"用法详解 2010-08-21 19:14:12
    OCR
    Linux strace命令
    wireshark esp
    https://sourceware.org/gdb/onlinedocs/gdb/Forks.html
    12306网上买火车票选择上中下铺的方法
    gdb调试有fork的程序
    named piped tcp proxy
    bash 提示用户输入 choice
  • 原文地址:https://www.cnblogs.com/jscode/p/3591323.html
Copyright © 2011-2022 走看看