HTML5的一個顯示電池狀態(tài)的API簡介

移動設(shè)備的份額在網(wǎng)絡(luò)流量中在大量增長,其所貢獻(xiàn)的網(wǎng)絡(luò)流量非常龐大,以至于為了移動設(shè)備,我們單獨(dú)創(chuàng)建了一些API和設(shè)計理念。一個非常典型的例子是 W3C電池狀態(tài)API,它允許一個應(yīng)用程序獲知設(shè)備的電池狀態(tài)信息。這篇文章探索了這個新的API,為你展示了如何把它整合進(jìn)你現(xiàn)有的應(yīng)用程序。
檢測設(shè)備是否支持
目前電池API依舊沒有得到主流支持。因此,在使用這個API前需要確認(rèn)當(dāng)前設(shè)備是否支持此API。下面展示的函數(shù)返回一個布恩值(True/False),指示當(dāng)前瀏覽器是否支持電池狀態(tài)API。
該函數(shù)首先檢測了 navigator.battery 對象是否存在。如果不存在,繼續(xù)檢測 Mozilla 專用的
navigator.mozBattery是否存在。我曾經(jīng)見過有些代碼還檢測了 webkitBattery對象,但是我無法證實其在Chrome中是否存在。
參考文檔:https://developer.mozilla.org/en-US/docs/DOM/window.navigator.battery
- functionisBatteryStatusSupported() {
- return!!(navigator.battery || navigator.mozBattery);
- }
檢查電池
如果電池對象存在,它會包含下列四個只讀屬性。
- charging —— (布恩值)指示系統(tǒng)的電池當(dāng)前是否正在充電。
如果系統(tǒng)不存在電池,或無法確定電池是否在充電,返回值是 True
- chargingTime —— (數(shù)值)電池完全充滿電量所需的時間(單位:秒)
當(dāng)電池完全被充滿電時,或者系統(tǒng)不存在電池時,這個值為0。
如果系統(tǒng)不在充電,或者無法確定完全充滿電所需時間,這個值為∞(無窮大)。
- dischargingTime —— 和chargingTime相似,(數(shù)值)到電池完全放電直到系統(tǒng)休眠剩余的時間(單位:秒)
如果放電時間無法確定,或 系統(tǒng)沒有電池 或 系統(tǒng)正在充電,這個值為 ∞ (無窮大)
- level —— (數(shù)值) 設(shè)備當(dāng)前電量等級。取值在(0 ~ 1.0)區(qū)間,與剩余電量百分比對應(yīng)。
1.0表示電池完全充滿電,或者不存在電池,或者數(shù)值無法確定。
檢測電池事件
上述所有屬性都與一個電池事件綁定。這些事件用來指示電池狀態(tài)的變化。比如,插入電源會使charging屬性從false變?yōu)閠rue。全部四種電池事件如下所列:
- chargingchange —— 這個類型的事件會在charging屬性改變時觸發(fā)。這個事件可以被 onchargingchange()事件處理器捕獲和處理。
chargingtimechange —— 這個類型的事件會在chargingtime屬性改變時觸發(fā)。這個事件可以被 onchargingtimechange()事件處理器捕獲和處理。
dischargingtimechange —— 這個類型的事件會在dischargingTime屬性改變時觸發(fā)。這個事件可以被 ondischargingtimechange()事件處理器捕獲和處理。
levelchange —— 這個類型的事件會在level屬性改變時觸發(fā)。這個事件可以被 onlevelchange()事件處理器捕獲和處理。
示例頁面
下面的代碼展示了如何使用 電池狀態(tài)API 的屬性和事件。
示例頁面顯示了API的各個屬性值,并且在事件觸發(fā)時更新它們的值。
點(diǎn)擊此處訪問在線示例。
- <!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>
結(jié)論
本文為Battery Status API給出了一個完整的總結(jié)和展示,盡管其仍未得到主流支持,但是這只是時間問題??紤]到移動互聯(lián)網(wǎng)的激增,開發(fā)者應(yīng)該盡快將電池信息納入設(shè)計范疇內(nèi)。
相關(guān)文章
淺談HTML5 FileReader分布讀取文件以及其方法簡介
本篇文章主要介紹了淺談HTML5 FileReader分布讀取文件以及其方法簡介,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-09HTML與XHTML、以及HTML4與HTML5標(biāo)簽之間的區(qū)別簡介
這篇文章主要介紹了HTML與XHTML、以及HTML4與HTML5標(biāo)簽之間的區(qū)別,是網(wǎng)頁前端編程入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-11-07- 隨著Windows8正式版發(fā)布的腳步近在咫尺,近來關(guān)于Win8、IE10、HTML5的新聞逐漸增多,很多朋友對于Win8系統(tǒng)以及IE10瀏覽器都比較了解,但對于HTML5是什么還真有不少朋友不清2012-10-26
- 前言:HTML5出現(xiàn)后,網(wǎng)絡(luò)安全更加受到廣泛的關(guān)注。Web對于網(wǎng)絡(luò)安全有哪些改進(jìn)?我們?nèi)绾蝸砻鎸υ絹碓轿kU的網(wǎng)絡(luò)欺詐和攻擊?下面的文章談到了W3C對于這個問題的最新解決方2012-07-10
HTML5的標(biāo)簽的代碼的簡單介紹 HTML5標(biāo)簽的簡介
本文主要介紹了HTML5的標(biāo)簽.不同于以前的標(biāo)簽.更簡單.更方便2012-05-28html5新增的定時器requestAnimationFrame實現(xiàn)進(jìn)度條功能
html5為什么新增一個requestAnimationFrame,他的出現(xiàn)是為了解決什么問題?帶著這些問題跟隨腳本之家小編一起學(xué)習(xí)吧2018-12-13- 下面小編就為大家?guī)硪黄狧TML5新增加的功能詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-05
- 大多數(shù)移動應(yīng)用,不管是企業(yè)移動應(yīng)用還是互聯(lián)網(wǎng)移動應(yīng)用,90%都可以使用基于HTML5的Web技術(shù)就足夠2013-12-13
- 這篇文章主要介紹了html5簡介及新增功能介紹,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-18