-
Notifications
You must be signed in to change notification settings - Fork 2
/
battery.js
68 lines (58 loc) · 2.13 KB
/
battery.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import { useState, useEffect } from "vue-hooks";
let unsupported;
const useBatteryStatus = () => {
// 检查浏览器是否支持 navigator.getBattery
if (typeof navigator !== "undefined" && "getBattery" in navigator) {
unsupported = false;
} else {
unsupported = true;
}
const initialBatteryStatus = !unsupported
? {
charging: null, // the charging state of the system's battery
chargingTime: null, // the time remaining in seconds until the system's battery is fully charged
dischargingTime: null, // the time remaining in seconds until the system's battery is completely discharged and the system is about to be suspended
level: null // the level of the system's battery
}
: {
unsupported
};
const [batteryStatus, setBatteryStatus] = useState(initialBatteryStatus);
const updateBatteryStatus = battery => {
setBatteryStatus({
chargingTime: battery.chargingTime,
dischargingTime: battery.dischargingTime,
level: battery.level,
charging: battery.charging
});
};
useEffect(() => {
if (!unsupported) {
const monitorBattery = battery => {
updateBatteryStatus(battery);
battery.addEventListener(
"levelchange",
updateBatteryStatus.bind(null, battery)
);
battery.addEventListener(
"chargingchange",
updateBatteryStatus.bind(null, battery)
);
battery.addEventListener(
"dischargingtimechange",
updateBatteryStatus.bind(null, battery)
);
battery.addEventListener(
"chargingtimechange",
updateBatteryStatus.bind(null, battery)
);
};
navigator.getBattery().then(monitorBattery);
}
}, []);
return {
...batteryStatus,
updateBatteryStatus
};
};
export { useBatteryStatus };