Skip to content

Instantly share code, notes, and snippets.

@cezarsmpio
Created April 16, 2014 13:44
Show Gist options
  • Save cezarsmpio/10877634 to your computer and use it in GitHub Desktop.
Save cezarsmpio/10877634 to your computer and use it in GitHub Desktop.
A Pen by Cezar Luiz.
<div class="container">
<div class="battery is-charging">
<div class="battery-status"></div>
<p class="battery-level">0%</p>
</div>
<!-- Battery Status -->
<ul class="battery-values">
<li class="if-charging"></li>
<li class="charging-time"></li>
<li class="discharging-time"></li>
</ul>
</div>
var bat = navigator.battery,
batContainer = document.querySelector('.battery'),
batStatus = document.querySelector('.battery-status'),
batLevel = document.querySelector('.battery-level'),
ifCharging = document.querySelector('.if-charging'),
chargingTime = document.querySelector('.charging-time'),
dischargingTime = document.querySelector('.discharging-time'),
critical = 0.2; // 20%
if (bat) {
// Check when the battery level change and when is in critical condition
var changeBatteryStatus = function() {
batStatus.style.width = (bat.level * 100) + '%';
if (bat.level <= critical) {
batContainer.classList.add('is-critical');
} else if (bat.level == 1) {
batContainer.classList.add('is-complete');
} else {
batContainer.classList.remove('is-critical');
batContainer.classList.remove('is-complete');
}
};
// Change the percentual text in DOM
var changeBatteryLevelText = function() {
batLevel.textContent = parseInt(bat.level * 100) + '%';
};
// Check if the battery is charging
var checkBatteryCharging = function () {
var charging = '';
if (bat.charging) {
batContainer.classList.add('is-charging');
batContainer.classList.remove('is-critical');
batContainer.classList.remove('is-complete');
charging = 'Yes';
} else {
batContainer.classList.remove('is-charging');
// Check is battery is critical
changeBatteryStatus();
charging = 'No';
}
ifCharging.textContent = 'Is charging? ' + charging;
};
// Check the battery is not charging and the time to the end
var dischargingTimeString = function () {
var discharging = '';
if (bat.dischargingTime != 'Infinity') {
discharging = 'Time to end in ~ ' + window.moment().seconds(bat.dischargingTime).format('HH:mm:ss');
}
dischargingTime.textContent = discharging;
};
// Check if battery is charging and its time to complete the charge
var chargingTimeString = function () {
var charging = '';
if (bat.chargingTime != 'Infinity') {
charging = 'Time to complete the charge in ~ ' + window.moment().seconds(bat.chargingTime).format('HH:mm:ss');
}
chargingTime.textContent = charging;
};
// When the battery level down
bat.addEventListener('levelchange', function() {
changeBatteryLevelText();
changeBatteryStatus();
}, false);
// When the battery is charging
bat.addEventListener('chargingchange', function() {
checkBatteryCharging();
}, false);
// When the battery is discharging
bat.addEventListener('dischargingtimechange', function() {
dischargingTimeString();
});
// When the battery is charging
bat.addEventListener('chargingtimechange', function() {
chargingTimeString();
});
// Set battery level status
changeBatteryStatus();
changeBatteryLevelText();
checkBatteryCharging();
dischargingTimeString();
chargingTimeString();
} else {
document.querySelector('.container').innerHTML = '<p class="no-support">Sorry, your browser does not support the Battery API :/ <br> Test in Firefox only devices with a battery as notebooks or Firefox OS :)</p>';
}
* {
-moz-box-sizing: border-box;
}
body {
font-size: 16px;
font-family: 'Raleway', sans-serif;
color: #000;
font-weight: 300;
background: #f0f0f2;
}
.battery {
width: 50%;
margin: 0 auto;
border: 15px solid #99ca3b;
height: 100px;
position: relative;
border-radius: 10px;
margin-top: 100px;
transition: .5s;
}
.battery::after {
content: ' ';
width: 15px;
height: 40px;
background: #99ca3b;
top: 50%;
margin-top: -20px;
right: -25px;
position: absolute;
}
.battery-status {
width: 0%;
height: 100%;
background: #99ca3b;
transition: .5s;
}
.battery-level {
color: #333;
font-size: 36px;
position: absolute;
top: 15px;
left: 20px;
}
.is-charging {
animation: isCharging 1s infinite alternate;
}
.is-critical {
border-color: #ca3b3b;
}
.is-critical .battery-status, .is-critical::after {
background: #ca3b3b;
}
.is-critical .battery-level {
color: #FFF;
}
.is-complete {
box-shadow: #99ca3b 0 0 30px 10px;
}
@keyframes isCharging {
to {
box-shadow: #99ca3b 0 0 30px 10px;
}
}
/* Battery values */
.battery-values {
text-align: center;
padding: 30px 10px;
}
.battery-values li {
margin: 10px 0;
font-size: 24px;
}
/* Not support */
.no-support {
font-size: 36px;
text-align: center;
padding: 40px 10px;
line-height: 70px;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment