首页 > 其他分享 >为何网页上要用Battery电池状态API

为何网页上要用Battery电池状态API

时间:2023-11-06 13:32:05浏览次数:33  
标签:log Battery battery 电量 API HTML5 充电 上要

手机自身的电源管理已经相当不错了,那为何网页上还要增加一个HTML5 Battery电池状态API呢?

 随着HTML5以及CSS3技术支持与发展,以及手机越来越高性能带来的可行性。移动端的页面显然会越来越烧电。例如,流畅的动画效果,模糊阴影等视觉体验。因此可能会出现这样的情况,用户电量快不行了,又没有电源来一发,你的网页还呼呼的烧电,显然,这不是用户所愿意看到的。

 因此,如果网页能够感知手机的电源,我们似乎能够为用户做的更多。

屏幕

  1. 页面白色背景变灰一点,或整体暗度降低;
  2. 移除gif动图
  3. 移除一些不关键的动画
  4. 如果可能的话,避免DOM操作

网络
手机网络或者wifi等的使用也是烧电的,我们可以:

  1. 停止使用频繁的Ajax操作
  2. HTML5离线存储技术
  3. HTML5 WebStorage本地存储技术
  4. 不要请求一些不重要的图片(如装饰性图片)

听觉和触觉输出
声音(HTML5 audio API)啊,震动(HTML5 vibrate API)什么的只会让手机早泄的更快。渐弱这些效果,或者干脆不用。

线程
借助Page Visibility API等,对于非激活态的选项卡页面,例如游戏页面什么的,都暂停掉。等其他一些省电的处理。这一里一外的用户体验,势必让产品更加人性化。

由此可见,HTML5 Battery API还是很有用的。

下面我们来学习一下Battery的使用!

注意:目前唯有手机QQ浏览器使用的x5内核比较良好的支持该API。但也只是部分属性支持,比如chargingTime 和dischargingTime 属性,显示的永远都是infinity(无限)。chargingtimechange 事件和dischargingtimechange 事件无法触发。

属性1:charging 表示电池是否在充电

属性2:chargingTime 表示电池充满需要的时间

属性3:dischargingTime 表示电池可用时间

属性4:level 表示电池当前的电量0 ~ 1

事件1:chargingchange 充电状态改变触发

事件2:chargingtimechange 所需充电时间改变触发

事件3:dischargingtimechange 剩余电量的是使用时间改变触发

事件4:levelchange 当前电量改变时触发

案例代码:

var battery = navigator.battery ||navigator.webkitBattery ||navigator.mozBattery ||navigator.msBattery;
if(battery){
	console.log(battery);
  log('是否在充电:'+battery.charging);
  log('充电时间:'+battery.chargingTime);
  log('当前电量能用多长时间:'+battery.dischargingTime);
  log('电量百分比:'+(battery.level*100)+'%');
  battery.addEventListener("chargingchange", function(e) {
    // 充电状态改变的时候会触发,例如发现正在充电,果断不使用节能模式。
    log( battery.charging ? "电源已接通":"电源已断开");
  }, false);
  battery.addEventListener("levelchange", function (e) {
    // 电池电量的百分比改变时候触发
    log('电量百分比:'+(battery.level*100)+'%');
  }, false);
  battery.addEventListener("chargingtimechange",function(e){
    // 还需要充电的时间改变的时候触发
    log('充电时间:'+battery.chargingTime);
  },false);
  battery.addEventListener("dischargingtimechange",function(e){
    // 剩余电量的使用时间改变时候触发
    log('当前电量能用多长时间:'+battery.dischargingTime);
  },false);
}else{
  console.log(battery);
  document.write('你的浏览器不支持Battery API');
}
function log(str){
	document.write(str+'<br>');
};

标签:log,Battery,battery,电量,API,HTML5,充电,上要
From: https://blog.51cto.com/u_16319180/8205672

相关文章

  • 义乌购API 根据关键词取商品列表
    义乌购API可以根据关键词取商品列表。通过调用义乌购API的item_search接口,传入关键词参数,可以获取到符合该关键词的商品列表。以下是使用义乌购API根据关键词取商品列表的步骤:注册义乌购开发者账号并获取授权码和密钥。在代码中导入义乌购API的SDK,设置请求的URL和请求方法。在请求......
  • Eolink Apikit 版本更新:数据字典功能上线、支持 MongoDB 数据库操作...
    ......
  • 如何使用 Loadgen 来简化 HTTP API 请求的集成测试
    引言在编写HTTP服务的过程中,集成测试[1]是保证程序正确性的重要一环,如下图所示,其基本的流程就是不断向服务发起请求然后校验响应的状态和数据等:为大量的API和用例编写测试是一件繁琐的工作,而Loadgen[2]正是为了简化这一过程而设计的。一个简单的测试假定我们在127.......
  • WebApi入门
    1.怎么理解webapi可以把他看作一个仓库,负责接收货物和出口货物只是一个地址MVC访问展示的是一个页面webapi访问地址是拿到一个数据2.webapi接口地址从何而来新建一个webapi项目,启动这是线程为我们提供的地址请求了这个地址,返回了一串数据https://localhost:5001/W......
  • face-api基于tensorflow 的人像检测npm 包
    face-api基于tensorflow的人像检测npm包,原始项目为justadudewhohacks/face-api.js但是因为缺少维护,社区有人自己fork了一个新的vladmandic/face-api,可以更好的支持tensorflow新版本,当然很不错还可以支持基于wasm的backend(@tensorflow/tfjs-backend-wasm)参考使用demo.......
  • Java系列:Java8 新特性:强大的 Stream API(创建 Stream、中间操作、终止操作)
    Java8中有两大最为重要的改变。第一个是Lambda表达式;另外一个则是StreamAPI。StreamAPI(java.util.stream)把真正的函数式编程风格引入到Java中。这是目前为止对Java类库最好的补充,因为StreamAPI可以极大提供Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。......
  • Kubernetes:kube-apiserver 和 etcd 的交互
    kubernetes:kube-apiserver系列文章:Kubernetes:kube-apiserver之scheme(一)Kubernetes:kube-apiserver之scheme(二)Kubernetes:kube-apiserver之启动流程(一)Kubernetes:kube-apiserver之启动流程(二)0.前言上几篇文章介绍了kubernetes的核心数据结构scheme......
  • 使用FastAPI部署Ultralytics YOLOv5模型
    前言 YOLO是YouOnlyLookOnce(你只看一次)的缩写,它具有识别图像中的物体的非凡能力,在日常应用中会经常被使用。所以本文将介绍如何使用FastAPI的集成YOLOv5,这样我们可以将YOLOv5做为API对外提供服务。本文转载自DeephubImba作者:auliyafirdaus仅用于学术分享,若侵权请联系删......
  • 在Vue 3中如何在created钩子中进行API调用?
    在Vue3中,您可以使用setup函数来替代Vue2中的created生命周期钩子,并在其中进行API调用。下面是一个示例:import{ref,onMounted}from'vue'importaxiosfrom'axios'exportdefault{setup(){//创建一个响应式变量来存储API的返回数据constdata=ref(null......
  • EFCore 使用FluntApi配置 全局查询筛选器
    我们在类中通常会有一个属性为IsDel来表示软删除或也称逻辑删除,这个属性会导致我们在进行查询操作时,每一次都要.where(s=>s.IsDel==false)非常的麻烦。在使用efCore时可以通过配置查询筛选器来很好的解决这个问题。publicclassSysUser{publiclongId{get;set;}......