移动设备占所有Web流量的越来越大的一部分。 这种流量非常大,以至于专门针对移动设备创建了API和设计实践。 W3C的Battery Status API就是一个例子,该API允许应用程序检查设备电池的状态。 本文探讨了相对较新的API,并向您展示了如何立即将其整合到您的应用程序中。
检测支持
仍然主要不支持Battery Support API。 因此,您必须先确认它存在,然后再尝试使用它。 以下函数返回一个布尔值,指示用户的浏览器是否支持API。 该函数检查是否存在navigator.battery
对象。 如果不存在,它还将检查Mozilla特定的mozBattery
对象。 我看过也检查webkitBattery
代码,但是我无法验证它是否存在于Chrome中。
function isBatteryStatusSupported() {
return !!(navigator.battery || navigator.mozBattery);
}
检查电池
如果battery
对象存在,它将包含以下四个只读属性。
-
charging
–此布尔值指示系统电池当前是否正在充电。 如果系统没有电池,或者无法确定该值,则为true
。 -
chargingTime
–该数值表示电池充满电之前剩余的时间(以秒为单位)。 如果电池已满,或者系统没有电池,那么chargingTime
设置为零。 如果系统未充电,或无法确定剩余时间,则将其设置为Infinity
。 -
dischargingTime
-到类似chargingTime
,该值表示的剩余直到电池完全放电,并且系统将暂停的秒数。 如果无法确定放电时间,没有电池或电池正在充电,则将该值设置为Infinity
。 -
level
–此数值代表当前的电池电量。 取值范围是0到1.0,对应于剩余电池寿命的百分比。 值1.0表示电池已充满电,没有电池或无法确定电量。
检测电池事件
前面讨论的每个属性都与电池事件有关。 这些事件用于识别电池状态的变化。 例如,插入系统将导致charging
从false
变为true
。 下面列出了四种电池事件。
-
chargingchange
–更新charging
时会触发此类事件。 这些事件可以使用onchargingchange()
事件处理程序进行处理。 -
chargingtimechange
-当这些事件被解雇chargingTime
被更新。 这些事件可以由onchargingtimechange()
事件处理程序处理。 -
dischargingtimechange
–更新dischargingTime
时间时,将触发dischargingtimechange
时间更改事件。 这些事件可以由ondischargingtimechange()
事件处理程序处理。 -
levelchange
–更新level
会触发这些事件。 可以使用onlevelchange()
事件处理程序来处理它们。
演示页
以下代码显示了如何使用电池状态API属性和事件。 示例页面显示每个属性的值,并在事件发生时更新它们。 该页面也可以在线获得 。
<!DOCTYPE html>
<html lang="en">
<head>
<title>The Battery Status API - Example</title>
<meta charset="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>
<div id="stats">
Your battery is currently <span id="charging"></span>.<br />
Your battery will be charged in <span id="chargingtime"></span> seconds.<br />
Your battery will be discharged in <span id="dischargingtime"></span> seconds.<br />
Your battery level is <span id="level"></span>%.
</div>
</body>
</html>
结论
本文提供了电池状态API的完整摘要。 尽管支持尚不广泛,但这只是时间问题。 鉴于移动Web的激增,开发人员应该尽快将电池纳入其设计中。
From: https://www.sitepoint.com/introducing-the-battery-status-api/