HTML5的一个显示电池状态的API简介


Posted in HTML / CSS onJune 18, 2015

移动设备的份额在网络流量中在大量增长,其所贡献的网络流量非常庞大,以至于为了移动设备,我们单独创建了一些API和设计理念。一个非常典型的例子是 W3C电池状态API,它允许一个应用程序获知设备的电池状态信息。这篇文章探索了这个新的API,为你展示了如何把它整合进你现有的应用程序。
 检测设备是否支持

目前电池API依旧没有得到主流支持。因此,在使用这个API前需要确认当前设备是否支持此API。下面展示的函数返回一个布恩值(True/False),指示当前浏览器是否支持电池状态API。

该函数首先检测了 navigator.battery 对象是否存在。如果不存在,继续检测 Mozilla 专用的

navigator.mozBattery是否存在。我曾经见过有些代码还检测了 webkitBattery对象,但是我无法证实其在Chrome中是否存在。

参考文档:https://developer.mozilla.org/en-US/docs/DOM/window.navigator.battery
 

XML/HTML Code复制内容到剪贴板
  1. functionisBatteryStatusSupported() {   
  2.   return!!(navigator.battery || navigator.mozBattery);   
  3. }  

检查电池

如果电池对象存在,它会包含下列四个只读属性。

  •     charging —— (布恩值)指示系统的电池当前是否正在充电。

    如果系统不存在电池,或无法确定电池是否在充电,返回值是 True

  •     chargingTime —— (数值)电池完全充满电量所需的时间(单位:秒)

    当电池完全被充满电时,或者系统不存在电池时,这个值为0。

    如果系统不在充电,或者无法确定完全充满电所需时间,这个值为∞(无穷大)。

  •     dischargingTime —— 和chargingTime相似,(数值)到电池完全放电直到系统休眠剩余的时间(单位:秒)

    如果放电时间无法确定,或 系统没有电池 或 系统正在充电,这个值为 ∞ (无穷大)

  •     level —— (数值) 设备当前电量等级。取值在(0 ~ 1.0)区间,与剩余电量百分比对应。

    1.0表示电池完全充满电,或者不存在电池,或者数值无法确定。

检测电池事件

上述所有属性都与一个电池事件绑定。这些事件用来指示电池状态的变化。比如,插入电源会使charging属性从false变为true。全部四种电池事件如下所列:

  •     chargingchange —— 这个类型的事件会在charging属性改变时触发。这个事件可以被 onchargingchange()事件处理器捕获和处理。
        chargingtimechange —— 这个类型的事件会在chargingtime属性改变时触发。这个事件可以被 onchargingtimechange()事件处理器捕获和处理。
        dischargingtimechange —— 这个类型的事件会在dischargingTime属性改变时触发。这个事件可以被 ondischargingtimechange()事件处理器捕获和处理。
        levelchange —— 这个类型的事件会在level属性改变时触发。这个事件可以被 onlevelchange()事件处理器捕获和处理。

 
示例页面

下面的代码展示了如何使用 电池状态API 的属性和事件。

示例页面显示了API的各个属性值,并且在事件触发时更新它们的值。

点击此处访问在线示例。
 

XML/HTML Code复制内容到剪贴板
  1. <!DOCTYPE html>  
  2. <htmllanghtmllang="en">  
  3. <head>  
  4.   <title>The Battery Status API - Example</title>  
  5.   <metacharsetmetacharset="UTF-8"/>  
  6.   <script>  
  7.     window.addEventListener("load", function() {   
  8.       var battery = navigator.battery || navigator.mozBattery;   
  9.       function displayBatteryStats() {   
  10.         document.getElementById("charging").textContent = (battery.charging) ? "charging" : "not charging";   
  11.         document.getElementById("chargingtime").textContent = battery.chargingTime;   
  12.         document.getElementById("dischargingtime").textContent = battery.dischargingTime;   
  13.         document.getElementById("level").textContent = battery.level * 100;   
  14.       }   
  15.       if (battery) {   
  16.         displayBatteryStats();   
  17.         battery.addEventListener("chargingchange", displayBatteryStats, false);   
  18.         battery.addEventListener("chargingtimechange", displayBatteryStats, false);   
  19.         battery.addEventListener("dischargingtimechange", displayBatteryStats, false);   
  20.         battery.addEventListener("levelchange", displayBatteryStats, false);   
  21.       } else {   
  22.         document.getElementById("stats").textContent = "Sorry, your browser does not support the Battery Status API";   
  23.       }   
  24.     }, false);   
  25.   </script>  
  26. </head>  
  27. <body>  
  28.   <dividdivid="stats">  
  29.     Your battery is currently <spanidspanid="charging"></span>.<br/>  
  30.     Your battery will be charged in <spanidspanid="chargingtime"></span> seconds.<br/>  
  31.     Your battery will be discharged in <spanidspanid="dischargingtime"></span> seconds.<br/>  
  32.     Your battery level is <spanidspanid="level"></span>%.   
  33.   </div>  
  34. </body>  
  35. </html>  

结论

本文为Battery Status API给出了一个完整的总结和展示,尽管其仍未得到主流支持,但是这只是时间问题。考虑到移动互联网的激增,开发者应该尽快将电池信息纳入设计范畴内。

HTML / CSS 相关文章推荐
CSS3对背景图片的裁剪及尺寸和位置的设定方法
Mar 07 HTML / CSS
可自定义箭头样式的CSS3气泡提示框
Mar 16 HTML / CSS
CSS3田字格列表的样式编写方法
Nov 22 HTML / CSS
HTML5 语音搜索只需一句代码
Jan 03 HTML / CSS
HTML5 video标签(播放器)学习笔记(一):使用入门
Apr 24 HTML / CSS
h5实现获取用户地理定位的实例代码
Jul 17 HTML / CSS
使用HTML5和CSS3制作一个模态框的示例
Mar 07 HTML / CSS
一个基于canvas的移动端图片编辑器的实现
Oct 28 HTML / CSS
浅析HTML5 meta viewport参数
Oct 28 HTML / CSS
CSS3实现列表无限滚动/轮播效果
Jun 23 HTML / CSS
html+css实现环绕倒影加载特效
Jul 07 HTML / CSS
html,css,javascript是怎样变成页面的
May 07 HTML / CSS
举例详解HTML5中使用JSON格式提交表单
Jun 16 #HTML / CSS
带你认识HTML5中的WebSocket
May 22 #HTML / CSS
用HTML5制作视频拼图的教程
May 13 #HTML / CSS
用HTML5制作一个简单的弹力球游戏
May 12 #HTML / CSS
用HTML5制作一个简单的桌球游戏的教程
May 12 #HTML / CSS
利用HTML5绘制点线面组成的3D图形的示例
May 12 #HTML / CSS
用HTML5制作烟火效果的教程
May 12 #HTML / CSS
You might like
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
php三维数组去重(示例代码)
2013/11/26 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
PHP实现图片压缩
2020/09/09 PHP
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
基于Jquery的简单图片切换效果
2011/01/06 Javascript
JavaScript实现表格排序方法
2013/06/14 Javascript
jquery得到iframe src属性值的方法
2014/09/25 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
Angular.js中处理页面闪烁的方法详解
2017/03/09 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
2017/10/19 jQuery
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
python通过imaplib模块读取gmail里邮件的方法
2015/05/08 Python
pandas中Timestamp类用法详解
2017/12/11 Python
python 3.7.0 下pillow安装方法
2018/08/27 Python
Python文件读写保存操作的示例代码
2018/09/14 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
2019/08/23 Python
python中树与树的表示知识点总结
2019/09/14 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
django数据模型(Model)的字段类型解析
2019/12/25 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
瑜伽服装品牌:露露柠檬(lululemon athletica)
2017/06/04 全球购物
猫咪家具:CatsPlay
2018/11/03 全球购物
Keds加拿大官网:购买帆布运动鞋和皮鞋
2019/09/26 全球购物
美国翻新电子产品商店:The Store
2019/10/08 全球购物
面向对象编程的优势是什么
2015/12/17 面试题
教师党员思想汇报
2014/01/06 职场文书
服装促销活动方案
2014/02/23 职场文书
工作会议主持词
2014/03/17 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
小学教师年度个人总结
2015/02/05 职场文书
我的中国梦主题教育活动总结
2015/05/07 职场文书