HTML5 规范已经越来越成熟,可以让你访问更多来自设备的信息,其中包括最近提交的 "Battery Status API"。如其名称所示,该 API 允许你通过 JavaScript 来获取电池的状态。因此通过使用这个 API 来判断当前正在使用电池供电,可避免运行一些重量级的 JavaScript 动画,提醒用户注意保存数据。如果你希望测试这个 API,这里有一个实际的例子。注意这个例子中电池剩余时间在我打开网页时是不可用的,几分钟后才正常显示。

我在最新的 Beta 版的 Mozilla 浏览器进行测试,目前还不支持 Mac ,但可以在 Windows、Android 和 iOS 上使用。在充电的时候也无法获取正确的数据。这里我们要制作一个简单的页面,显示如下的电池信息数据:

此文章接下来将包含如下内容:

  • 如何使用电池 API
  • 创建一些文本域来显示从 API 中获取的数据
  • 创建一个电池图片用来显示剩余电量
  • 使用事件侦听器来更新显示的数据

接下来我们对 API 做一个简单快速的浏览。

如何使用电池 API

使用这个 API 非常简单,下面是你可以通过 API 获取的属性信息:

 [NoInterfaceObject]
interface BatteryManager : EventTarget {
readonly attribute boolean charging;
readonly attribute double chargingTime;
readonly attribute double dischargingTime;
readonly attribute double level;
};

其中 charging 属性用来指示当前是否正在充电,chargingTime 返回完成充电还需要的时间,而 dischargingTime 显示当前电量能使用多长时间,最后一个是 level 显示电池电量的百分比,非常直观。

除了上述的一些属性外,API 还定义了一些回调函数:

 [TreatNonCallableAsNull]
attribute Function? onchargingchange;
[TreatNonCallableAsNull]
attribute Function? onchargingtimechange;
[TreatNonCallableAsNull]
attribute Function? ondischargingtimechange;
[TreatNonCallableAsNull]
attribute Function? onlevelchange;

你可以将自己写的函数注册到这些回调函数里来获取属性的变化信息。

创建一些文本域来显示从 API 中获取的数据

下面我们开始来制作电池信息显示的页面,我们创建了如下的页面文件:

 <div id="box">
<div id="battery"></div>
<div id="text">
<span style="display: block;margin-bottom:15px;font-size: xx-large;"><strong>Battery
specifications</strong></span>
<span style="display: block" id="level">Battery level: unknown</span>
<span style="display: block" id="status">Charging status: unknown</span>
<span style="display: block" id="charged">Battery charged: unknown</span>
</div>
</div>

然后使用如下 JavaScript 代码来确保其初始显示正确的电池数据:

 // get the battery information
var battery = navigator.mozBattery; // get the battery information to be displayed
$('#level').text("Battery level: " + Math.round(battery.level * 100) + "%");
$('#status').text("Charging status: " + ((battery.charging) ? "true" : "false"));
if (battery.charging) {
$('#charged').text("Battery time to charge: " + battery.chargingTime);
} else {
$('#charged').text("Battery time left: " + (Math.round(battery.dischargingTime / 60)) + " minutes");
}

如你在代码中所看的,非常的简单,接下来我们还要生成一个用来指示电池剩余电量的图片。

创建一个电池图片用来显示剩余电量

我不想过多讨论这个细节,因为很无趣。你可以从 source code from the example 了解详情. 我们创建了一个简单的电池对象,提供一个 updateBattery 的调用可以了解电池的电量状态:

 var b = new Battery("assets/bat_empty.png", "assets/bat_full.png", 96, 168);
$("#battery").append(b.domElement);
b.updateBattery(battery.level * 100);

使用事件侦听器来更新显示的数据

最后我们添加一些事件侦听器来即时的处理电池电量变化后数据显示的更新:

 // when the loader is connected
battery.addEventListener("chargingchange", function (e) {
$('#status').text("Charging status: " + ((battery.charging) ? "true" : "false"));
}, false); // when charging time changes update the time to charge / time left
battery.addEventListener("chargingtimechange", function (e) {
if (battery.charging) {
$('#charged').text("Battery time to charge: " + battery.chargingTime);
} else {
$('#charged').text("Battery time left: " + (Math.round(battery.dischargingTime / 60)) + " minutes");
} }, false); // when dischargingtime changes update the time to charge / time left
battery.addEventListener("dischargingtimechange", function (e) {
if (battery.charging) {
$('#charged').text("Battery time to charge: " + (Math.round(battery.dischargingTime / 60)) + " minutes");
} else {
$('#charged').text("Battery time left: " + (Math.round(battery.dischargingTime / 60)) + " minutes");
}
}, false); // listener that is notified when the level changes
battery.addEventListener("levelchange", function (e) {
$('#level').text("Battery level: " + Math.round(battery.level * 100) + "%");
b.updateBattery(100 * battery.level)
}, false);

很简单吧?下面是在我手机上运行的结果。

在 Windows 上运行的结果:

【HTML5】使用 JavaScript 来获取电池状态(Battery Status API)的更多相关文章

  1. javascript 常用获取页面宽高信息 API

    在页面的构建中 常常会需要获取页面的一些宽高信息,例如实现 惰性加载图片 需要获取页面的可见区域高度 和 已滚动区域的高度,以判断图片所在位置是否可见来决定加载图片的时间, 花点时间整理了一下,获取页 ...

  2. Best Practices for Performance_4.Optimizing Battery Life 获取充电状态、电池信息,"sticky"类型的广播

    http://developer.android.com/training/monitoring-device-state/index.htmlhttp://developer.android.com ...

  3. WINCE 电池状态(C#)

    WINCE 电池状态(C#) 分类:             电量              2013-04-18 12:08     397人阅读     评论(1)     收藏     举报   ...

  4. 如何在使用 RemoteWebDriver 打开网页的同时获取 Http 状态码

    最近一直在用Selenium这个开源项目写一些web 自动化的小玩意.本来一直运行的挺好,直到有一天突然发现资源抓取失败了,翻看日志才发现,原来本该正常打开的页面返回了504错误所以自然失败了.如何避 ...

  5. LODOP获取打印机状态码和状态码含义测试

    由于打印机千差万别,打印机执行的标准也不一样,LODOP获取的打印状态码也可能不同,安装了个打印机驱动实际测试一下,测试的打印机驱动是Brother Color Type3 Class Driver. ...

  6. LODOP获取打印状态码和时间列表

    之前有博文介绍获取打印状态码和打印状态码的含义,相关博文:LODOP获取打印机状态码和状态码含义测试.此外 ,也有获取状态码及其变化的方法,可以获取打印状态码的列表,列表包含每个状态和每个状态的时间. ...

  7. Jenkins获取编译状态

    背景:在通过python的API调用Jenkins,启动Jenkins的job任务时,是需要知道Jenkins的编译状态,获取编译状态为 status=server.get_build_info(jo ...

  8. 几个有趣的WEB设备API 前端提高B格必备(一)——电池状态&震动api

    受到同事启发,突然发现了几个有趣又实用的web api,没想到前端还有这么多有趣的东西可以玩~~简直过分. 1.电池状态API navigator.getBattery():这个api返回的是一个pr ...

  9. 与众不同 windows phone (47) - 8.0 其它: 锁屏信息和锁屏背景, 电池状态, 多分辨率, 商店, 内置协议, 快速恢复

    [源码下载] 与众不同 windows phone (47) - 8.0 其它: 锁屏信息和锁屏背景, 电池状态, 多分辨率, 商店, 内置协议, 快速恢复 作者:webabcd 介绍与众不同 win ...

随机推荐

  1. Spring Boot+BootStrap fileInput 多图片上传

    一.依赖文件 <link rel="stylesheet" type="text/css" th:href="@{/js/bootstrap/c ...

  2. [转] 把eclipse设置为黑色主题 方式二

    首先,废话不多说,给大家看一下我设置成黑色主题后的效果: 至于怎么达到这个效果呢,首先是中间的编辑区. 从我的云盘里下载压缩包,解压到eclipse目录的dropins文件夹下,你就会有各种各样的编辑 ...

  3. OpenStack之Glance模块

    一.Glance服务 1.Glance架构 Glance架构是一个典型的CS架构,提供的也是标准的Rest接口,各个layer分层也是很清楚的. 2.Glance服务 Glance是OpenStack ...

  4. addEventListener、onclick和jquery的bind()、click()

    addEventListener("click",function(event){},false); removeEventListener("click",f ...

  5. hadoop https配置

    在 hadoop1生成ca并拷贝至hadoop2,hadoop2. (密码随便设置,大于6位即可.如adminadmin) cd /etc/https openssl req -new -x509 - ...

  6. Java之JNDI详解

    转载自(http://blog.csdn.net/u010430304/article/details/54601302) JNDI的基本应用         JNDI是Java Naming and ...

  7. java计算两个日期之间相隔的月份(向下取整)

    最近需求里面有个需要计算两个日期之间相隔的月份,写起来还挺繁琐,需要将各种情况都要考虑到,写了一个作为以后自己的工具吧. //获取哪一天 public static int getDay(Date d ...

  8. 第四篇:Spark SQL Catalyst源码分析之TreeNode Library

    /** Spark SQL源码分析系列文章*/ 前几篇文章介绍了Spark SQL的Catalyst的核心运行流程.SqlParser,和Analyzer,本来打算直接写Optimizer的,但是发现 ...

  9. PHP 操控微信公众号

    <?php class AutoAction extends CommonAction { public function index() { $timestamp = $_GET['times ...

  10. SSH两种验证方式原理

    本帖转自 http://www.cnblogs.com/hukey/p/6248468.html SSH验证方式有两种,分别为用户密码认证以及密钥认证. 1.用户密码认证方式 说明: (1) 当客户端 ...