移动设备的份额在网络流量中在大量增长,其所贡献的网络流量非常庞大,以至于为了移动设备,我们单独创建了一些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
- functionisBatteryStatusSupported() {
- return!!(navigator.battery || navigator.mozBattery);
- }
检查电池
如果电池对象存在,它会包含下列四个只读属性。
- 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的各个属性值,并且在事件触发时更新它们的值。
点击此处访问在线示例。
- <!DOCTYPE html>
- <htmllanghtmllang="en">
- <head>
- <title>The Battery Status API - Example</title>
- <metacharsetmetacharset="UTF-8"/>
- <script>
- window.addEventListener("load", function() {
- var battery = navigator.battery || navigator.mozBattery;
- function displayBatteryStats() {
- document.getElementById("charging").textContent = (battery.charging) ? "charging" : "not charging";
- document.getElementById("chargingtime").textContent = battery.chargingTime;
- document.getElementById("dischargingtime").textContent = battery.dischargingTime;
- document.getElementById("level").textContent = battery.level * 100;
- }
- if (battery) {
- displayBatteryStats();
- battery.addEventListener("chargingchange", displayBatteryStats, false);
- battery.addEventListener("chargingtimechange", displayBatteryStats, false);
- battery.addEventListener("dischargingtimechange", displayBatteryStats, false);
- battery.addEventListener("levelchange", displayBatteryStats, false);
- } else {
- document.getElementById("stats").textContent = "Sorry, your browser does not support the Battery Status API";
- }
- }, false);
- </script>
- </head>
- <body>
- <dividdivid="stats">
- Your battery is currently <spanidspanid="charging"></span>.<br/>
- Your battery will be charged in <spanidspanid="chargingtime"></span> seconds.<br/>
- Your battery will be discharged in <spanidspanid="dischargingtime"></span> seconds.<br/>
- Your battery level is <spanidspanid="level"></span>%.
- </div>
- </body>
- </html>
结论
本文为Battery Status API给出了一个完整的总结和展示,尽管其仍未得到主流支持,但是这只是时间问题。考虑到移动互联网的激增,开发者应该尽快将电池信息纳入设计范畴内。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 第五街的士高《印度激情版》3CD [WAV+CUE][2.4G]
- 三国志8重制版哪个武将智力高 三国志8重制版智力武将排行一览
- 三国志8重制版哪个武将好 三国志8重制版武将排行一览
- 三国志8重制版武将图像怎么保存 三国志8重制版武将图像设置方法
- 何方.1990-我不是那种人【林杰唱片】【WAV+CUE】
- 张惠妹.1999-妹力新世纪2CD【丰华】【WAV+CUE】
- 邓丽欣.2006-FANTASY【金牌大风】【WAV+CUE】
- 饭制《黑神话》蜘蛛四妹手办
- 《燕云十六声》回应跑路:年内公测版本完成95%
- 网友发现国内版《双城之战》第二季有删减:亲亲环节没了!
- 邓丽君2024-《漫步人生路》头版限量编号MQA-UHQCD[WAV+CUE]
- SergeProkofievplaysProkofiev[Dutton][FLAC+CUE]
- 永恒英文金曲精选4《TheBestOfEverlastingFavouritesVol.4》[WAV+CUE]
- 群星《国风超有戏 第9期》[320K/MP3][13.63MB]
- 群星《国风超有戏 第9期》[FLAC/分轨][72.56MB]