Animation Timing

  • Window.requestAnimationFrame(callback): 告诉浏览器希望执行一个动画,让浏览器在下一个动画帧安排一次网页重绘(类似于 setTimeout,但是更精确)

    • 该函数返回一个唯一标识符,在取消动画请求时使用
    • callback: 你希望调用的函数

使用上面函数的方法是 反复调用 即可。

1
2
3
4
5
// 使用 setTimeout 模拟 requestAnimationFrame
// 1秒 内刷新 60次
function( callback ){
window.setTimeout(callback, 1000 / 60);
};
  • Window.cancelAnimationFrame(requestID): 取消对应 requestID 的动画请求

使用 requestAnimationFrame 的目的是为了让各种网页动画效果(DOM动画、Canvas动画、SVG动画、WebGL动画)能够有一个统一的刷新机制,从而节省系统资源,提高系统性能,改善视觉效果。

requestAnimationFrame 的优势,在于充分利用显示器的刷新机制,比较节省系统资源。显示器有固定的刷新频率(60Hz 或 75Hz),也就是说,每秒最多只能重绘 60次 或 75次,requestAnimationFrame 的基本思想就是与这个刷新频率保持同步,利用这个刷新频率进行页面重绘。此外,使用这个 API,一旦页面不处于浏览器的当前标签,就会自动停止刷新。这就节省了 CPU、GPU 和电力。

不过有一点需要注意,requestAnimationFrame 是在主线程上完成。这意味着,如果主线程非常繁忙,requestAnimationFrame 的动画效果会大打折扣。

Fullscreen API

Fullscreen API Living Standard — Last Updated 24 February 2017

使用以下方法需要带上浏览器前缀。

  • Element.requestFullscreen(): 发出一个异步请求,使指定元素全屏显示
1
2
3
4
5
6
7
8
9
10
11
12
// 兼容各个浏览器
function launchFullscreen(element) {
if(element.requestFullscreen) {
element.requestFullscreen();
} else if(element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if(element.msRequestFullscreen){
element.msRequestFullscreen();
} else if(element.webkitRequestFullscreen) {
element.webkitRequestFullScreen();
}
}
  • Document.exitFullscreen(): 取消全屏
1
2
3
4
5
6
7
8
9
10
11
12
// 兼容各个浏览器
function exitFullscreen() {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
}
}
  • Document.fullscreenElement: 返回当前处于全屏的节点
1
2
// 兼容各个浏览器
var fullscreenElement = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;
  • Document.fullscreenEnabled: 返回一个布尔值,表示当前文档是否可以切换到全屏状态
1
2
// 兼容各个浏览器
var fullscreenEnabled = document.fullscreenEnabled || document.mozFullScreenEnabled || document.webkitFullscreenEnabled || document.msFullscreenEnabled;

Page Visibility API

PageVisibility API 用于判断页面是否处于浏览器的当前窗口,即是否可见

Page Visibility Level 2 W3C Editor’s Draft 17 November 2016

  • Document.hidden: 只读属性,返回一个布尔值标识当前页面是否隐藏(hidden)
  • Document.visibilityState: 只读属性,表示当前页面的状态,可以取三个值,分别是 visibile(页面可见)、hidden(页面不可见)、prerender(页面正处于渲染之中,不可见)
  • visibilitychange 事件: 当当前页面状态发生变化时触发
1
2
3
4
// 小测试
document.addEventListener("visibilitychange", function() {
console.log( document.visibilityState );
});

Geolocation API

Geolocation 接口是一个用来获取设备地理位置的可编程的对象,它可以让Web内容访问到设备的地理位置,这将允许Web应用基于用户的地理位置提供定制的信息。

  • navigator.geolocation: 只读属性,返回一个 Geolocation 对象,通过这个对象可以访问到设备的位置信息

  • Geolocation.getCurrentPosition(success, error, options) 获取设备当前位置

  • Geolocation.watchPosition(success[, error[, options]]): 注册监听器,在设备的地理位置发生改变的时候自动被调用,返回一个唯一标识符
  • Geolocation.clearWatch(id): 清除指定 ID 的监听器

这个 API 在本机上试验时,暂时还没有一次成功获得到地理位置,以后成功补。

Web Notification API

Notification 对象使用来为用户设置和显示桌面通知。

  • new Notification(title, options)

    • title: 显示通知的标题
    • options: 一个用来设置通知的对象(下面只列出部分参数,全部参数看这里
      • dir: 文字的方向, auto(自动), ltr(从左到右), rtl(从右到左)
      • lang: 指定通知中所使用的语言
      • body: 通知中额外显示的字符串
      • tag: 赋予通知一个 ID,以便在必要的时候对通知进行刷新、替换或移除。
      • icon: 一个图片的URL,将被用于显示通知的图标。
  • 事件

    • click 事件: 用户点击通知时触发
    • show 事件: 通知显示时触发
    • error 事件: 通知遇到错误时触发
    • close 事件: 用户关闭通知时触发
  • Notification.permission: 静态只读属性,返回一个状态字符串(granted、denied、default),可以用来判断当前页面是否允许显示通知

  • Notification.requestPermission(): 静态方法,返回一个 Promise 对象,用于向用户申请当前页面显示通知的权限。这个方法只能被用户行为调用(比如:onclick 事件),并且不能被其他的方式调用
  • close(): 实例方法,关闭通知
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 小例子
 
document.body.onclick = function() {
// 请求允许通知
Notification.requestPermission().then(function(result) {
if (result == 'granted') {
let msg = new Notification('Notification Title', {
body: 'I am notification body~'
});
} else {
alert('Can\'t get permission~');
}
});
};

<

HTML5 Web Performance Timing APIs

HTML5 一些有用的 APIs的更多相关文章

  1. Hello,HTML 到 HTML5

    HTML5是WEB应用将发展到一个水平必要的技术. 下面是WEB发展的时间轴: 1991 - HTML 1994 - HTML2 1996 - CSS1 + JAVASCRIPT 1997 - HTM ...

  2. 5款帮助简化的HTML5 Audio开发的Javascript类库

    HTML5的audio标签提供了我们方便控制声音的功能,可是使用原生的HTML5来开发声音或者音乐相关的项目仍旧很的麻烦.在今天这篇文章中,我们将介绍5款帮助你简化开发的javascript audi ...

  3. HTML5 一篇就够的中文教程

    HTML5 是近十年来 Web 开发标准最巨大的飞跃.HTML5 并非仅仅用来表示 Web 内容,它将 Web 带入一个成熟的应用平台,在 HTML5 平台上,视频.音频.图象.动画,以及同电脑的交互 ...

  4. Android中的数据存储

    Android中的数据存储主要分为三种基本方法: 1.利用shared preferences存储一些轻量级的键值对数据. 2.传统文件系统. 3.利用SQLite的数据库管理系统. 对SharedP ...

  5. 【Android Developers Training】 26. 在SQL数据库中保存数据

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  6. 10) 十分钟学会android--app数据保存三种方式

    虽然可以在onPause()时保存一些信息以免用户的使用进度被丢失,但大多数Android app仍然是需执行保存数据的动作.大多数较好的apps都需要保存用户的设置信息,而且有一些apps必须维护大 ...

  7. 11个有用的移动网页开发App和HTML5框架

    在过去的两年里,触屏设备飞速增长.iOS和Android设备让开发者和设计师开始重新思考他们的网页应用,以提供更好的触屏体验. 移动Web应用相对于本地的App有很多优势,虽然也有很多设计和开发上的挑 ...

  8. 8 个有用的 HTML5 标签

    作为一个 web 前端开发者,在制作页面的时候你会从一大堆不同的标签中选择合适的标签来完成相应的功能.有些 HTML5 标签广为流传,例如 <article> <header> ...

  9. 有用的内置Node.js APIs

    前言 在构建你的第一个Node.js应用程序时,了解node开箱即用的实用工具和API是很有帮助的,可以帮助解决常见的用例和开发需求. 有用的Node.js APIs Process:检索有关环境变量 ...

随机推荐

  1. ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph(有源上下界最大流 模板)

    关于有源上下界最大流: https://blog.csdn.net/regina8023/article/details/45815023 #include<cstdio> #includ ...

  2. 使用spyder3调试python程序

    Ctrl+F5 以Debug模式运行文件 在debug之前记得用%reset 指令清空一下ipython工作空间中的变量,以免影响debug中变量值的查看 无论你是否打断点,都会在第一行语句执行之前中 ...

  3. Leetcode 421.数组中两数的最大异或值

    数组中两数的最大异或值 给定一个非空数组,数组中元素为 a0, a1, a2, … , an-1,其中 0 ≤ ai < 231 . 找到 ai 和aj 最大的异或 (XOR) 运算结果,其中0 ...

  4. install chrome on ubuntu14.04

    summary chrome broswer can't found in ubuntu14.04 default source list.To install chrome ,you must ad ...

  5. python3 保存一个网页为html文件

    我使用的python版本为3.5.2. 最近租房子,恨透了中介,想绕过中介去租.结果发现豆瓣同城里有好多二房东,感觉人都还不错.但是豆瓣这里没有信息检索的功能,只能人工地看房子的地址,非常地不方便.所 ...

  6. Linux系统维护管理命令及vim编辑器

    系统维护管理命令date.clear $>>date //显示或修改系统时间与日期. //%H:小时 %M:分钟 %S:秒 %Y完整年份 %d:日 %m:月份 eg: date " ...

  7. BZOJ 4552 [Tjoi2016&Heoi2016]排序 ——线段树 二分答案

    听说是BC原题. 好题,二分答案变成01序列,就可以方便的用线段树维护了. 然后就是区间查询和覆盖了. #include <map> #include <cmath> #inc ...

  8. FZU Problem 2200 cleaning dp

    Problem Description N个人围成一圈在讨论大扫除的事情,需要选出K个人.但是每个人与他距离为2的人存在矛盾,所以这K个人中任意两个人的距离不能为2,他们想知道共有多少种方法. Inp ...

  9. BZOJ4316 小C的独立集 【仙人掌】

    题目 图论小王子小C经常虐菜,特别是在图论方面,经常把小D虐得很惨很惨. 这不,小C让小D去求一个无向图的最大独立集,通俗地讲就是:在无向图中选出若干个点,这些点互相没有边连接,并使取出的点尽量多. ...

  10. Java众神之路(1)-语言介绍

    Java语言介绍 1.Java的历史 我个人认为,学习一种技术,不止要关注技术本身,也应该去了解一下它的发展史,这一方面是对技术本身的尊重,另一方面也是希望能够通过该技术的发展历史推测出其未来可能的发 ...