JavaScript來獲取電池狀態(tài)的源代碼(Battery Status API)

2012-06-16 20:31:30來源:oschina作者:紅薯

HTML5 規(guī)范已經(jīng)越來越成熟,可以讓你訪問更多來自設(shè)備的信息,其中包括最近提交的 "Battery Status API"。如其名稱所示,該 API 允許你通過 JavaScript 來獲取電池的狀態(tài)。因此通過使用這個 API 來判斷當前正在使用

HTML5 規(guī)范已經(jīng)越來越成熟,可以讓你訪問更多來自設(shè)備的信息,其中包括最近提交的 "Battery Status API"。如其名稱所示,該 API 允許你通過 JavaScript 來獲取電池的狀態(tài)。因此通過使用這個 API 來判斷當前正在使用電池供電,可避免運行一些重量級的 JavaScript 動畫,提醒用戶注意保存數(shù)據(jù)。如果你希望測試這個 API,這里有一個實際的例子。注意這個例子中電池剩余時間在我打開網(wǎng)頁時是不可用的,幾分鐘后才正常顯示。

我在最新的 Beta 版的 Mozilla 瀏覽器進行測試,目前還不支持 Mac ,但可以在 Windows、Android 和 iOS 上使用。在充電的時候也無法獲取正確的數(shù)據(jù)。這里我們要制作一個簡單的頁面,顯示如下的電池信息數(shù)據(jù):

此文章接下來將包含如下內(nèi)容:

  • 如何使用電池 API
  • 創(chuàng)建一些文本域來顯示從 API 中獲取的數(shù)據(jù)
  • 創(chuàng)建一個電池圖片用來顯示剩余電量
  • 使用事件偵聽器來更新顯示的數(shù)據(jù)

接下來我們對 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 還定義了一些回調(diào)函數(shù):

[TreatNonCallableAsNull]
         attribute Function? onchargingchange;
[TreatNonCallableAsNull]
         attribute Function? onchargingtimechange;
[TreatNonCallableAsNull]
         attribute Function? ondischargingtimechange;
[TreatNonCallableAsNull]
         attribute Function? onlevelchange;

你可以將自己寫的函數(shù)注冊到這些回調(diào)函數(shù)里來獲取屬性的變化信息。

創(chuàng)建一些文本域來顯示從 API 中獲取的數(shù)據(jù)

下面我們開始來制作電池信息顯示的頁面,我們創(chuàng)建了如下的頁面文件:

<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 代碼來確保其初始顯示正確的電池數(shù)據(jù):

// 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");
}

如你在代碼中所看的,非常的簡單,接下來我們還要生成一個用來指示電池剩余電量的圖片。

創(chuàng)建一個電池圖片用來顯示剩余電量

我不想過多討論這個細節(jié),因為很無趣。你可以從 source code from the example 了解詳情. 我們創(chuàng)建了一個簡單的電池對象,提供一個 updateBattery 的調(diào)用可以了解電池的電量狀態(tài):

var b = new Battery("assets/bat_empty.png", "assets/bat_full.png", 96, 168);
  $("#battery").append(b.domElement);

  b.updateBattery(battery.level * 100);
 

使用事件偵聽器來更新顯示的數(shù)據(jù)

最后我們添加一些事件偵聽器來即時的處理電池電量變化后數(shù)據(jù)顯示的更新:

// 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);

很簡單吧?下面是在我手機上運行的結(jié)果。
 

JavaScript來獲取電池狀態(tài)的源代碼

在 Windows 上運行的結(jié)果:

JavaScript來獲取電池狀態(tài)的源代碼
關(guān)鍵詞:JavaScript電池API

贊助商鏈接: