<header class="row">
    <p class="small-2 columns">Energy Save Mode</p>
    <div class="switch">
      <input class="switch-input" id="powerSwitch" type="checkbox" name="exampleSwitch">
      <label class="switch-paddle" for="powerSwitch">
        <span class="show-for-sr">Download Kittens</span>
      </label>
    </div>
</header>

<hr />

<div class="row">
  <div class="small-12 columns">
    <button class=" button" id="btnDrain">Click to drain battery</button>
    <p>Counter: <span id="counter1">0</span></p>
    <p>Counter: <span id="counter2">50</span></p>
  </div>
</div>
header {
  padding-top:10px;
}
const PowerManager = {
  events: [],
  mode: 0,
  
  addEventListener(el, event, callback) {
    if (typeof el === 'string') {
      el = document.querySelector(el);
    }
    
    const ev = {
      start: () => el.addEventListener(event, callback),
      stop: () => el.removeEventListener(event, callback),
    };
    ev.start();
    this.events.push(ev);
  },
  
  setInterval(callback, interval) {
    let id;
    const ev = {
      start: () => id = setInterval(callback, interval),
      stop: () => clearInterval(id),
    };    
    this.events.push(ev);    
    return ev.start();
  },
  
  enterPowerSaveMode() {
    if (this.mode === 1) return;
    
    console.log('Entering power save mode');
    this.mode = 1;
    this.events.forEach((ev) => ev.stop());
  },
  
  leavePowerSaveMode() {
    if (this.mode === 0) return;
    console.log('Leaving power save mode');    
    this.mode = 0;
    this.events.forEach((ev) => ev.start());
  },
  
  isInPowerSaveMode() {
    return this.mode === 1;
  }
};

PowerManager.setInterval(function() {
  document.querySelector('#counter1').textContent++;
}, 1000);

PowerManager.setInterval(function() {
  document.querySelector('#counter2').textContent++;
}, 1500);

PowerManager.addEventListener('#btnDrain', 'click', function() {
  for (let i=0; i < 10; i++) {
    document.querySelector('#counter1').textContent++;
    document.querySelector('#counter2').textContent++;    
  }
});

document.querySelector('#powerSwitch').addEventListener('click', function() {
  if (PowerManager.isInPowerSaveMode()) {
    PowerManager.leavePowerSaveMode();
  } else {
    PowerManager.enterPowerSaveMode();
  }  
});

function readBattery(battery) {
  if (battery.charging) {
    PowerManager.leavePowerSaveMode();
    document.querySelector('#powerSwitch').checked = false;
  } else {
    PowerManager.enterPowerSaveMode();
    document.querySelector('#powerSwitch').checked = true;
  }
}

if (navigator.getBattery) {
  navigator.getBattery().then(function(battery) {
    battery.addEventListener('chargingchange', function() {
      readBattery(battery);
    });

    battery.addEventListener('levelchange', function() {
      readBattery(battery);
    });
    readBattery(battery);
  });
} else {
  document.querySelector('.not-support').removeAttribute('hidden');
}

External CSS

  1. https://cdnjs.cloudflare.com/ajax/libs/foundation/6.3.0/css/foundation.min.css

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js