【HTML5】使用 JavaScript 来获取电池状态(Battery Status API)
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)的更多相关文章
- javascript 常用获取页面宽高信息 API
在页面的构建中 常常会需要获取页面的一些宽高信息,例如实现 惰性加载图片 需要获取页面的可见区域高度 和 已滚动区域的高度,以判断图片所在位置是否可见来决定加载图片的时间, 花点时间整理了一下,获取页 ...
- Best Practices for Performance_4.Optimizing Battery Life 获取充电状态、电池信息,"sticky"类型的广播
http://developer.android.com/training/monitoring-device-state/index.htmlhttp://developer.android.com ...
- WINCE 电池状态(C#)
WINCE 电池状态(C#) 分类: 电量 2013-04-18 12:08 397人阅读 评论(1) 收藏 举报 ...
- 如何在使用 RemoteWebDriver 打开网页的同时获取 Http 状态码
最近一直在用Selenium这个开源项目写一些web 自动化的小玩意.本来一直运行的挺好,直到有一天突然发现资源抓取失败了,翻看日志才发现,原来本该正常打开的页面返回了504错误所以自然失败了.如何避 ...
- LODOP获取打印机状态码和状态码含义测试
由于打印机千差万别,打印机执行的标准也不一样,LODOP获取的打印状态码也可能不同,安装了个打印机驱动实际测试一下,测试的打印机驱动是Brother Color Type3 Class Driver. ...
- LODOP获取打印状态码和时间列表
之前有博文介绍获取打印状态码和打印状态码的含义,相关博文:LODOP获取打印机状态码和状态码含义测试.此外 ,也有获取状态码及其变化的方法,可以获取打印状态码的列表,列表包含每个状态和每个状态的时间. ...
- Jenkins获取编译状态
背景:在通过python的API调用Jenkins,启动Jenkins的job任务时,是需要知道Jenkins的编译状态,获取编译状态为 status=server.get_build_info(jo ...
- 几个有趣的WEB设备API 前端提高B格必备(一)——电池状态&震动api
受到同事启发,突然发现了几个有趣又实用的web api,没想到前端还有这么多有趣的东西可以玩~~简直过分. 1.电池状态API navigator.getBattery():这个api返回的是一个pr ...
- 与众不同 windows phone (47) - 8.0 其它: 锁屏信息和锁屏背景, 电池状态, 多分辨率, 商店, 内置协议, 快速恢复
[源码下载] 与众不同 windows phone (47) - 8.0 其它: 锁屏信息和锁屏背景, 电池状态, 多分辨率, 商店, 内置协议, 快速恢复 作者:webabcd 介绍与众不同 win ...
随机推荐
- redis 简单命令操作
一.概述: 在该系列的前几篇博客中,主要讲述的是与Redis数据类型相关的命令,如String.List.Set.Hashes和Sorted-Set.这些命令都具有一个共同点,即所有的操作都是针对与K ...
- 安装vmware虚拟机和linux(centos)
打开 WMware Workstation 8,然后选择新建虚拟机 2 新建虚拟机向导 选择 自定义(高级)(C)然后点击[下一步]按钮 3 选择虚拟机硬件兼容性 选择 workstation 8.0 ...
- SQL学习笔记之MySQL索引知识点
0x00 概述 之前写过一篇Mysql B+树学习,简单的介绍了B+数以及MySql使用B+树的原因, 有了这些基础知识点,对MySql索引的类型以及索引使用的一些技巧,就比较容易理解了. 0x01 ...
- Django---ModelForm详解
示例: from django.db import models from django.forms import ModelForm TITLE_CHOICES = ( ('MR', 'Mr.'), ...
- MVC通过服务端对数据进行验证(和AJAX验证一样)
在实体类中 添加 Remote属性,指定用某个View下的某个方法进行验证,如下面表示用User控制器中的UserExiting方法验证 public class User { [Remot ...
- JS 中根据iframe子页面自动iframe高度
注意:为使页面有更好的兼容性,在使用以下代码前,请将aspx页中头部的<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional ...
- 深入学习js之——词法作用域和动态作用域
开篇 当我们在开始学习任何一门语言的时候,都会接触到变量的概念,变量的出现其实是为了解决一个问题,为的是存储某些值,进而,存储某些值的目的是为了在之后对这个值进行访问或者修改,正是这种存储和访问变量的 ...
- Linux下ping命令参数详细解析
-a Audible ping. #Audible ping. -A Adaptive ping. Interpacket interval adapts to round-trip time, so ...
- myEclipse项目转成Eclipse项目
这里说一种把myEclipse项目转成Eclipse项目继续开发 1. 请首先确保你的eclipse是javaee版本的,或者已经安装看wtp插件 2. 然后修改eclipse工程下的.proje ...
- [参考]C的scanf 和 C++的fscanf 的用法
说明:本文不适合新手学习,适合用来做参考.本文参考有其他博客的内容,不过年代久远已经忘记了,在此感谢各位博主! scanf函数 用 法:int scanf(char *format[,argument ...