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. 2018 Multi-University Training Contest 10 CSGO(HDU - 6435)(最远曼哈顿距离)

    有 n 种主武器,m 种副武器.每种武器有一个基础分数k种属性值 X[i] . 选出一种主武器 mw 和一种副武器 sw,使得两种武器的分数和 + 每个属性的差值尽量大.(参考下面的式子) 多维的最远 ...

  2. The 2018 ACM-ICPC China JiangSu Provincial Programming Contest J. Set

    Let's consider some math problems. JSZKC has a set A=A={1,2,...,N}. He defines a subset of A as 'Meo ...

  3. UVa 10564 DP Paths through the Hourglass

    从下往上DP,d(i, j, k)表示第(i, j)个格子走到底和为k的路径条数. 至于字典序最小,DP的时候记录一下路径就好. #include <cstdio> #include &l ...

  4. HDU 2242 双连通分量 考研路茫茫——空调教室

    思路就是求边双连通分量,然后缩点,再用树形DP搞一下. 代码和求强连通很类似,有点神奇,=_=,慢慢消化吧 #include <cstdio> #include <cstring&g ...

  5. 等待唤醒(wait / notify)机制

    如果一个线程从头到尾执行完也不和别的线程打交道的话,那就不会有各种安全性问题了.但是协作越来越成为社会发展的大势,一个大任务拆成若干个小任务之后,各个小任务之间可能也需要相互协作最终才能执行完整个大任 ...

  6. STL学习笔记1--vector

    C++STL(Standard Template Library)标准模板库是通用类模板和算法的集合.包含一些标准的数据结构的实现如queues(队列),lists(链表),stacks(栈)等.ST ...

  7. day05_02 IDE介绍及设置

    notepad++比较麻烦,使用IDE工具进行程序开发 集成开发环境(IDE,Integrated Development Environment) VIM #经典的linux下的文本编辑器 Emac ...

  8. HAZU校赛 Problem K: Deadline

    Problem K: Deadline Time Limit: 2 Sec Memory Limit: 1280 MB Submit: 1106 Solved: 117 [Submit][Status ...

  9. Linux Shell系列教程之(十)Shell for循环

    本文是Linux Shell系列教程的第(十)篇,更多Linux Shell教程请看:Linux Shell系列教程 基本任何语言都有自己的循环语句,Shell当然也不例外,今天就为大家介绍下Shel ...

  10. 归并排序,时间复杂度nlogn

    思路: /*   考点:   1. 快慢指针:2. 归并排序.   此题经典,需要消化吸收.   复杂度分析:              T(n)            拆分 n/2, 归并 n/2 ...