前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >HTML5的这些api你知道吗?

HTML5的这些api你知道吗?

作者头像
IMWeb前端团队
发布于 2017-12-29 10:49:40
发布于 2017-12-29 10:49:40
1.4K00
代码可运行
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队
运行总次数:0
代码可运行

以下是之前学习的一些HTML5 API的总结,在HTML5中有许多功能和接口很值得我们去了解和学习。

  • 页面可见性API--page Visbility
  • 全屏API --full Screen
  • 获取MediaAPI--getUserMedia
  • 电池API --battery
  • 资源预加载API--link Prefetching

Page Visibility 页面可见性API

该API可以用来检测页面对于用户的可见性,即返回用户当前浏览的页面或标签tap的状态变化。 在最小化浏览器、切换tap页面时生效.(如需对app中几个webview进行切换操作时,可使用pageVisibility接口进行相应的事件监听和处理。)

page visibility的介绍

【document.hidden】 该值表示page是否是可见的,值为boolean值

【document.visibilityState】 这个visibilitystate 可有三个值得可能:

【visible】 表示该page是处于最前面的页面并且不是处于一个最小化的窗口 【hidden】 表示该page不是处于最前面的页面或者是处于一个最小化的窗口 【prerender】 表示该页面内容正在重新渲染并且该页面对于用户是不可见的

【isibilitychange Event】*监听window visibility 的改变的事件

相关代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 设置隐藏属性和可见改变事件的名称,属性需要加浏览器前缀  // since some browsers only offer vendor-prefixed support  var hidden, state, visibilityChange;   
if (typeof document.hidden !== "undefined") {  
  hidden = "hidden";  
  visibilityChange = "visibilitychange";  
  state = "visibilityState";  
} else if (typeof document.mozHidden !== "undefined") {  
  hidden = "mozHidden";  
  visibilityChange = "mozvisibilitychange";  
  state = "mozVisibilityState";  
} else if (typeof document.msHidden !== "undefined") {  
  hidden = "msHidden";  
  visibilityChange = "msvisibilitychange";  
  state = "msVisibilityState";  
} else if (typeof document.webkitHidden !== "undefined") {  
  hidden = "webkitHidden";  
  visibilityChange = "webkitvisibilitychange";  
  state = "webkitVisibilityState";  
}  

// 添加一个标题改变的监听器  
document.addEventListener(visibilityChange, function(e) {  
  // 开始或停止状态处理  
}, false);

page visibility的用处

对于visibility的改变,我们可以怎么用了做什么呢。

  • 我们可以对那些定期刷新内容的页面进行控制,当该页面不可见则不刷新,可见则刷新
  • 我们还可以根据页面的是否可见来暂停和继续音频,视频的播放
  • 我们还可以根据页面可见去计算我们网站的用户停留在本页面的更为精确的数据,而不仅仅是打开页面而不停留在本页面。

Full Screen API全屏API

该API允许开发者以编程方式将Web应用程序全屏运行,使Web应用程序更像本地应用程序。十分简单有用的api.

Full Screen 的介绍

FullScreen 的API使用非常简单,其有两种模式

  • Launching Fullscreen Mode 启动全屏模式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // 找到适合浏览器的全屏方法  function launchFullScreen(element) {  
  if(element.requestFullScreen) {  
    element.requestFullScreen();  
  } else if(element.mozRequestFullScreen) {  
    element.mozRequestFullScreen();  
  } else if(element.webkitRequestFullScreen) {  
    element.webkitRequestFullScreen();  
  }  
}  
// 启动全屏模式  
launchFullScreen(document.documentElement); // the whole page  
launchFullScreen(document.getElementById("videoElement")); // any individual element
  • Exit FullScreen Mode 退出全屏模式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Whack fullscreenfunction exitFullscreen() {
  if(document.exitFullscreen) {
    document.exitFullscreen();
  } else if(document.mozCancelFullScreen) {
    document.mozCancelFullScreen();
  } else if(document.webkitExitFullscreen) {
    document.webkitExitFullscreen();
  }
}

// Cancel fullscreen for browsers that support it!
exitFullscreen();

Full Screen 的相关属性和事件

目前fullscreen 仍存在兼容的问题,许多能使用的浏览器仍需要在其相应的属性和事件加相关的前缀。

【document.fullScreenElement】 该属性表示启动全屏的元素(如 video这些)

【document.fullScreenEnabled】该属性表示当前是否全屏

【fullscreenchange 事件】 监听全屏状态改变的事件

2.2 Full Scrren 的相关

css有一些关于fullscreen的css属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
:-webkit-full-screen,
:-moz-full-screen,
:-ms-fullscreen,
:full-screen {
    /*pre-spec */
   /* properties */
}
:fullscreen { 
    /* spec */
   /* properties */
}
/* deeper elements */:-webkit-full-screen video {
   width: 100%;
   height: 100%;
}
/* styling the backdrop*/::backdrop {
  /* properties */
}
::-ms-backdrop {
  /* properties */
}

FullScreen的小结

第一次见到这个API是在看一些手机小说和移动端漫画网站时,发现其有全屏的观看的功能。全屏api目前可能存在兼容性的问题,但相信不久的将来肯定会是一个使用频率超高的api

getUserMedia API

该API允许Web应用程序访问摄像头和麦克风,而无需使用插件,该API在客户端最先支持的,但在pc端仍不可用。

getUserMedia API 的介绍

先阅读下下面的html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--
    正常正确情况下,使用video等元素,我们是需要在确认客户端是支持该元素时才
    回相应地用js创建这些元素,但通过使用getUserMedia api,
    我们即可在html中直接创建这些元素(而不需要用js来创建),
-->
    <video id="video" width="640" height="480" autoplay></video>
    <button id="snap">Snap Photo</button>
    <canvas id="canvas" width="640" height="480"></canvas>

相关JS代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 设置事件监听器  
window.addEventListener("DOMContentLoaded", function() {  
  // 获取元素  
  var canvas = document.getElementById("canvas"),  
    context = canvas.getContext("2d"),  
    video = document.getElementById("video"),  
    videoObj = { "video": true },  
    errBack = function(error) {  
      console.log("Video capture error: ", error.code);   
    };  

  // 设置video监听器  
  if(navigator.getUserMedia) { // Standard  
    navigator.getUserMedia(videoObj, function(stream) {  
      video.src = stream;  
      video.play();  
    }, errBack);  
  } else if(navigator.webkitGetUserMedia) { // WebKit-prefixed  
    navigator.webkitGetUserMedia(videoObj, function(stream){  
      video.src = window.webkitURL.createObjectURL(stream);  
      video.play();  
    }, errBack);  
  }  
}, false);

一旦确定当前浏览器是支持getUserMedia的时, 我们可以同简单的方法将当前我们的video元素的src视频地址赋值给用户手机本地的video,然后通过video的play方法拉起本地video的启动和连接。这样的话我们就可以使用本地的播放器来播放。

电池API(Battery API)

这是一个针对移动设备应用程序的API,主要用于检测设备电池信息。

Battery API 的介绍

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var battery = navigator.battery || navigator.webkitBattery || navigator.mozBattery;  

// 电池属性  
console.warn("Battery charging: ", battery.charging); // 当前电池是否在充电 true  
console.warn("Battery level: ", battery.level); // 0.58  
console.warn("Battery discharging time: ", battery.dischargingTime);  

// 添加事件监听器  
battery.addEventListener("chargingchange", function(e) {  
  console.warn("Battery charge change: ", battery.charging);  
}, false);

为什么获取电池信息的api

为什么我们需要用到battery api?现在许多移动端apps都内嵌着web浏览器包装的(不再是完全native的应用)。所以我们需要一个方法去获取系统的信息,app有一些过程是`十分耗电的,然后我们就需要在用户启动时给用户一些警告信息告诉用户当前设备电量较低。这是一个十分重要简单的api.相应在不久的将来会发挥应有的作用。

Link Prefetching【预加载】

预加载网页内容为浏览者提供一个平滑的浏览体验。这个api我们在业务偶尔也会使用到

什么是link预加载

Link prefetching 是利用浏览器最佳的时间去下载或者预加载一些用户可能将会在不久将来浏览的文档的一种浏览器机制。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- full page -->  
<link rel="prefetch" href="http://davidwalsh.name/css-enhancements-user-experience" />  
<!-- just an image -->  
<link rel="prefetch" href="http://davidwalsh.name/wp-content/themes/walshbook3/images/sprite.png" />

什么时候使用link预加载是否在自己的网站使用预加载,可以参考一下几点:

  • 当你做的是一种类似slideshow的网页,需要提前加载近1-3张页面(假设这些页面并不大)
  • 预先加载在网站中许多网页都会用到的图片
  • 预先加载网站搜索的结果的页面

参考链接 http://davidwalsh.name/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
几个神奇的Web Api,你(可能)不知道~
作为前端er,我们的工作与web是分不开的,随着HTML5的日益壮大,浏览器自带的webapi也随着增多。本篇文章主要选取了几个有趣且有用的webapi进行介绍,分别介绍其用法、用处以及浏览器支持度,同时我也分别为这几个api都做了一个简单的demo(https://github.com/1921622004/webapi) (真的很简单,样式等于没有~)这几个api分别是:
苏南
2020/12/16
5850
几个神奇的Web Api,你(可能)不知道~
未来网站开发必备:14个让你惊艳的JavaScript Web API!
快来免费体验ChatGpt plus版本的,我们出的钱 体验地址:https://chat.waixingyun.cn 可以加入网站底部技术群,一起找bug,另外新版作图神器已上线 https://cube.waixingyun.cn/home
前端小智@大迁世界
2023/07/09
6220
未来网站开发必备:14个让你惊艳的JavaScript Web API!
11 个 CSS 知识搭配 11 个 JS 特性 (实用合集)
这篇文章我会介绍 11 在开发过程中经常遇到的 CSS 相关知识点,以及 11 个有趣亦实用的 JavaScript 特性。
用户1462769
2019/10/16
9180
关于HTML面试题汇总之visibility
一、页面可见性(visibility) 主要提供两个属性,一个事件(都在document对象上): 1. 属性:    1.1.  hidden:获取或设置当前页面的可见性,boolean值;    1.2. visibilityState: 获取当前页面可见性状态,值为hidden、visibility其中一个 2. 事件:visibilityChange:页面可见性发生改变时触发的事件 3. 由于各类浏览器的支持情况不一致,都需要加上私有属性的前缀,如 webkit、moz、ms、o等。在ie9-不支持
sam dragon
2018/01/17
8760
【前端词典】分享 8 个有趣且实用的 API
这些 API 的示例代码我已放在 github 上了,地址:https://github.com/wanqihua/The-dictionary-of-front-end-test
小生方勤
2019/05/31
7930
# 学会这些 Web API 使你的开发效率翻倍
随着浏览器的日益壮大,浏览器自带的功能也随着增多,在 Web 开发过程中,我们经常会使用一些 Web API 增加我们的开发效率。
九旬
2023/10/19
5000
这些不常用的Web API真的有用吗? 别问,问就是有用🈶
本文列举了一些列比较不常见的Web API,内容较多,所以有关兼容性的内容在本文不会出现,大家可以自己去查阅。 以下案例能配动图的我尽量去配了,以免内容枯草乏味,但是如果内容有误,也请大家亲喷或者纠正👌 方法列表 querySelector(元素向下查询,返回一个) querySelectorAll(元素向下查询,返回多个) closest(元素向上查询) dataset(获取元素以"data-"为前缀的属性集合) URLSearchParams(查询参数) hidden(隐藏元素) contentedit
聪明的汤姆
2019/08/23
9340
这些不常用的Web API真的有用吗? 别问,问就是有用🈶
Page Visibility API 教程
但是,这些事件在手机上可能不会触发,页面就直接关闭了。因为手机系统可以将一个进程直接转入后台,然后杀死。
ruanyf
2018/11/22
6680
10个你可能没用过,但很强大的Web API
在本文中,我将介绍 10 个不那么流行的 Web API。不那么流行并不意味着它们没有用处。你可以在项目的各种用例中使用它们。
@超人
2021/05/24
6890
10个你可能没用过,但很强大的Web API
这些Web API真的有用吗?别问,问就是有用
本文列举了一些列比较不常见的Web API,内容较多,所以有关兼容性的内容在本文不会出现,大家可以自己去查阅。以下案例能配动图的我尽量去配了,以免内容枯草乏味,但是如果内容有误,也请大家亲喷或者纠正?
用户1462769
2019/08/26
1.2K0
这些Web API真的有用吗?别问,问就是有用
10个不那么知名但很实用的Web API
在本文中,我将介绍 10 个不那么流行的 Web API。不那么流行并不意味着它们没有用处。你可以在项目的各种用例中使用它们。
深度学习与Python
2020/09/23
6290
10个不那么知名但很实用的Web API
网页全屏模式轻松掌握[局部元素全屏展示]
我第一次对网页全屏模式有概念,是那种网页播放视频的全屏播 放的那种。感觉很强,前几个星期有个需求也是关于全屏模式的,接触之后才知道全屏模式并不神秘,是个很容易掌握的技能…
OBKoro1
2020/10/27
3K0
网页全屏模式轻松掌握[局部元素全屏展示]
掌握这个API,让你的网页展示效果提升10倍
第一反应是用 CSS 设置 position: fixed 加上宽高 100%,但这样并不是真正的全屏,因为浏览器的工具栏还在。
沉浸式趣谈
2025/02/26
1382
掌握这个API,让你的网页展示效果提升10倍
HTML5点击全屏的方法
这个按钮是?我移了好几遍,没有title提示。图形也不具有代表性,一个圈圈意思是?——圈人??是不是啊??不敢点,点了不知道会发生什么,浏览器会不会关掉!!我思想斗争做了很久,终于弱弱地点了一下~~
javascript.shop
2019/09/04
4.8K0
HTML5点击全屏的方法
前端学习(4)~html5详解(二)
在HTML5的规范中,我们可以通过为元素增加 draggable="true" 来设置此元素是否可以进行拖拽操作,其中图片、链接默认是开启拖拽的。
Vincent-yuan
2020/02/23
7430
脑洞大开之采用HTML5+SignalR2.0(.Net)实现原生Web视频
本文介绍了一种基于HTML5和SignalR技术的视频聊天室程序,该程序利用了HTML5的WebRTC技术实现视频的实时传输,利用SignalR技术实现服务端与客户端的通信。同时,文章还列举了一些优化点,如使用压缩算法来减小数据传输量,以及使用分块传输编码来提高传输效率等。
GuZhenYin
2018/01/04
1.1K0
脑洞大开之采用HTML5+SignalR2.0(.Net)实现原生Web视频
【JS】1705- 重学 JavaScript API - Fullscreen API
本文中,我们将探索 Fullscreen API 的概念、使用方法、实际应用、兼容性和优缺点,并提供一些建议和注意事项。让我们一起深入了解吧!
pingan8787
2023/09/01
4600
【JS】1705- 重学 JavaScript API - Fullscreen API
掌握这个API,让你的网页展示效果提升10倍
第一反应是用 CSS 设置 position: fixed 加上宽高 100%,但这样并不是真正的全屏,因为浏览器的工具栏还在。
沉浸式趣谈
2025/02/24
1430
掌握这个API,让你的网页展示效果提升10倍
离开和进入html页面时改变title
离开和进入页面时改变网页标题,最近也才刚刚开始js学习,下面这段代码简单就是说访客如果离开你的网站之后,站点标题会发生变化。原理是使用了HTML5的Page Visibility API 目前页面可见性API有两个属性,一个事件:
qiangzai
2021/12/21
2.1K0
离开和进入html页面时改变title
JS控制全屏,监听退出全屏事件
实现方案 //进入全屏 function requestFullScreen(de) { if(de.requestFullscreen){ //W3C de.requestFullscreen(); }else if (de.mozRequestFullScreen){ //FIREFOX de.mozRequestFullScreen(); }else if (de.webkitRequestFullScreen){
Yiiven
2022/12/15
12K0
相关推荐
几个神奇的Web Api,你(可能)不知道~
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档