视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
HTML5新特性之移动设备API
2020-11-27 15:10:15 责编:小采
文档


为了更好地为移动设备服务,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的一种应用是,我们可以针对亮度的强弱来改网页背景和文字颜色。

    下载本文
    显示全文
    专题