Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >几个神奇的Web Api,你(可能)不知道~

几个神奇的Web Api,你(可能)不知道~

作者头像
苏南
发布于 2020-12-16 01:57:35
发布于 2020-12-16 01:57:35
58100
代码可运行
举报
文章被收录于专栏:漫画前端漫画前端
运行总次数:0
代码可运行

点击上方“IT平头哥联盟”,选择“置顶或者星标”

与您一起成长~

公众号回复 [加群 ] 一起学习交流~

作者: awesome23

简介

作为前端er,我们的工作与web是分不开的,随着HTML5的日益壮大,浏览器自带的webapi也随着增多。本篇文章主要选取了几个有趣且有用的webapi进行介绍,分别介绍其用法、用处以及浏览器支持度,同时我也分别为这几个api都做了一个简单的demo(https://github.com/1921622004/webapi) (真的很简单,样式等于没有~)这几个api分别是:

  • page lifecycle
  • onlineState
  • 利用deviceOrientation制作一个随着手机旋转的正方体
  • battery status
  • custom event
  • 利用execCommand完成一个简单的富文本

page lifecycle(网页生命周期)

介绍

我们可以用document.visibitilityState来监听网页可见度,是否卸载,但是在手机和电脑上都会现这种情况,就是比如说页面打开过了很久没有打开,这时你看在浏览器的tab页中看着是可以看到内容的,但是点进去却需要加载。chrome68添加了 freezeresume事件,来完善的描述一个网页从加载到卸载,包括浏览器停止后台进程,释放资源各种生命阶段。从一个生命周期阶段到另外一个生命周期阶段会触发不同的事件,比如onfocus,onblur,onvisibilitychange,onfreeze等等,通过这些事件我们可以相应网页状态的转换。具体的教程推荐大家看看阮一峰大神的教程。

用法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
window.addEventListener('blur',() => {})window.addEventListener('visibilitychange',() => {    // 通过这个方法来获取当前标签页在浏览器中的激活状态。    switch(document.visibilityState){        case'prerender': // 网页预渲染 但内容不可见        case'hidden': // 内容不可见 处于后台状态,最小化,或者锁屏状态        case'visible': // 内容可见        case'unloaded': // 文档被卸载    }});

用处

大家可以看下这个demo

所以说,这个API的用处就是用来相应我们网页的状态,比如说我们的页面是在播放视频或者是一个网页的游戏,你可以通过这个API来去做出对应的相应,暂停视频,游戏暂停等等。

浏览器支持度

page visibilituState

online state(网络状态)

这个API就很简单了,就是获取当前的网络状态,同时也有对应的事件去相应网络状态的变化。

用法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
window.addEventListener('online',onlineHandler)window.addEventListener('offline',offlineHandler)

用处

比如说我们的网站是视频网站,正在播放的时候,网络中断了,我们可以通过这个API去相应,给用户相应的提示等等。

浏览器支持度

Vibration(震动)

让手机震动~~~ 嗯,就这么简单。

用法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 可以传入一个大于0的数字,表示让手机震动相应的时间长度,单位为msnavigator.vibrate(100)// 也可以传入一个包含数字的数组,比如下面这样就是代表震动300ms,暂停200ms,震动100ms,暂停400ms,震动100msnavigator.vibrate([300,200,100,400,100])// 也可以传入0或者一个全是0的数组,表示暂停震动navigator.vibrate(0)

用处

用来给用户一个提示,比如说数据校验失败,当然震动不止这点作用,大家自己去扩展吧~~~

浏览器支持度

device orientation(陀螺仪)

通过绑定事件来获取设备的物理朝向,可以获取到三个数值,分别是:

  • alpha:设备沿着Z轴的旋转角度
  • beta:设备沿着X轴的旋转角度
  • gamma:设备沿着Y轴的旋转角度

用法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
window.addEventListener('deviceorientation',e => {    console.log('Gamma:',e.gamma);    console.log('Beta:',e.beta);    console.log('Alpha:',e.Alpha);})

用处

这种自然是web VR 中的使用场景会相对较多。这是我写的一个小demo

浏览器支持度

battery status

这个API就使用来获取当前的电池状态

用法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 首先去判断当前浏览器是否支持此APIif ('getBattery' in navigator) {    // 通过这个方法来获取battery对象    navigator.getBattery().then(battery => {    // battery 对象包括中含有四个属性    // charging 是否在充电    // level 剩余电量    // chargingTime 充满电所需事件    // dischargingTime 当前电量可使用时间    const { charging, level, chargingTime, dischargingTime } = battery;    // 同时可以给当前battery对象添加事件 对应的分别时充电状态变化 和 电量变化    battery.onchargingchange = ev => {        const { currentTarget } = ev;        const { charging } = currentTarget;    };    battery.onlevelchange = ev => {        const { currentTarget } = ev;        const { level } = ev;    }    })} else {    alert('当前浏览器不支持~~~')}

用处

用来温馨的提示用户当前电量~~~

浏览器支持度

这个浏览器的支持度很低。。。。

execCommand 执行命令

当将HTML文档切换成设计模式时,就会暴露出 execcommand 方法,然后我们可以通过使用这个方法来执行一些命令,比如复制,剪切,修改选中文字粗体、斜体、背景色、颜色,缩进,插入图片等等等等。

用法

用法也很简单,这里简单介绍几个,详细的介绍大家可以去MDN上看看。 这个API接受三个参数,第一个是要执行的命令,第二个参数mdn上说是Boolean用来表示是否展现用户界面,但我也没测试出来有什么不同,第三个参数就是使用对应命令所需要传递的参数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 一般不会直接去操作我们本身的HTML文档,可以去插入一个iframe然后通过contentDocument来获取、操作iframe中的HTML文档。let iframe = document.createElement('ifram');let doc = iframe.contentDocument;// 首先要将HTML文档切换成设计模式doc.designMode = 'on';
// 然后就可以使用execCommand 这个命令了;// 执行复制命令,复制选中区域doc.execCommand('copy')// 剪切选中区域doc.execCommand('cut')// 全选doc.execCommand('selectAll')// 将选中文字变成粗体,同时接下来输入的文字也会成为粗体,doc.execCommand('bold')// 将选中文字变成斜体,同时接下来输入的文字也会成为斜体,doc.execCommand('italic')// 设置背景颜色,,比如设置背景色为红色,就传入 'red'即可doc.execCommand('backColor',true,'red')

用处

我用这些命令简单的写了一个富文本的demo,大家可以看一下Demo,效果如下:

浏览器支持度

CustomEvent (自定义事件)

大家都知道各种事件是如何绑定的,但是有时候这些事件不够用呢,custom event就可以解决这样的问题。

用法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let dom = document.querySelector('#app');// 绑定事件, 传递过来的值可以通过ev.detail 来获取dom.addEventListener('log-in',(ev) => {    const { detail } = ev;    console.log(detail); // hello})// 派发事件,需要传入两个参数,一个是事件类型,另外一个是一个对象,detail就是传递过去的值dom.dispatchEvent(new CustomEvent('log-in',{    detail:'hello'}))

用处

绑定自定义事件,最近很火的框架Omi,其中的自定义事件就是基于customEvent实现的。

浏览器支持度

最后

就先介绍到这些,web api越来越多,当然每个人不可能全都熟记于心,这篇文章也只是简单介绍一下,还有很多有意思而且很重要的API,比如:web componentsservice workergenric sensor等等,不过这些都有很多人在钻研,同时文档相对较多。 相信你看完这些至少已经知道这些API的大概用法了,如果有兴趣了解用法的话,可以去看下我写的demo,也可以去看看MDN文档去深入研究一下。

参考

  • MDN文档
  • 阮一峰大神的博客
  • web-api-you-dont-know 视频演讲
  • www.zhangyunling.com/725.html
  • Omi WeElement源码

PS:福利,转发本公众号任意一篇文章到朋友圈集20个赞,即可获取掘金小册5折码哦!

- end -

用心分享 一起成长 做有温度的攻城狮

每天记得对自己说:你是最棒的!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 画漫画的程序员 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
这些不常用的Web API真的有用吗? 别问,问就是有用🈶
本文列举了一些列比较不常见的Web API,内容较多,所以有关兼容性的内容在本文不会出现,大家可以自己去查阅。 以下案例能配动图的我尽量去配了,以免内容枯草乏味,但是如果内容有误,也请大家亲喷或者纠正👌 方法列表 querySelector(元素向下查询,返回一个) querySelectorAll(元素向下查询,返回多个) closest(元素向上查询) dataset(获取元素以"data-"为前缀的属性集合) URLSearchParams(查询参数) hidden(隐藏元素) contentedit
聪明的汤姆
2019/08/23
9310
这些不常用的Web API真的有用吗? 别问,问就是有用🈶
# 学会这些 Web API 使你的开发效率翻倍
随着浏览器的日益壮大,浏览器自带的功能也随着增多,在 Web 开发过程中,我们经常会使用一些 Web API 增加我们的开发效率。
九旬
2023/10/19
4920
这些Web API真的有用吗?别问,问就是有用
本文列举了一些列比较不常见的Web API,内容较多,所以有关兼容性的内容在本文不会出现,大家可以自己去查阅。以下案例能配动图的我尽量去配了,以免内容枯草乏味,但是如果内容有误,也请大家亲喷或者纠正?
用户1462769
2019/08/26
1.2K0
这些Web API真的有用吗?别问,问就是有用
没了解过的Web API
getBattery getBattery方法提供了系统的电量信息,返回一个promise对象 navigator.getBattery().then(res => { console.log(res) /** 四个属性 charging 是否在充电 chargingTime 充满电所需时间 dischargingTime 当前电量可使用时间 level 剩余电量 */ /** 添加事件 onchargingchange 监听充电状态改变
peng_tianyu
2022/12/15
5260
没了解过的Web API
【前端词典】分享 8 个有趣且实用的 API
这些 API 的示例代码我已放在 github 上了,地址:https://github.com/wanqihua/The-dictionary-of-front-end-test
小生方勤
2019/05/31
7900
10个你可能没用过,但很强大的Web API
在本文中,我将介绍 10 个不那么流行的 Web API。不那么流行并不意味着它们没有用处。你可以在项目的各种用例中使用它们。
@超人
2021/05/24
6870
10个你可能没用过,但很强大的Web API
几个非常有意思的javascript知识点总结
作为一名前端爱好者, 笔者利用空余时间研究了几个国外网站的源码,发现不管是库,还是业务代码,都会用到了一些比较有意思的API,虽然平时在工作中部分接触过,但是经过这次的研究,觉得很有必要总结一下,毕竟已经2020年了,是时候更新一下技术储备了,本文主要通过实际案例来带大家快速了解以下几个知识点:
徐小夕
2020/04/23
5910
几个非常有意思的javascript知识点总结
10个不那么知名但很实用的Web API
在本文中,我将介绍 10 个不那么流行的 Web API。不那么流行并不意味着它们没有用处。你可以在项目的各种用例中使用它们。
深度学习与Python
2020/09/23
6250
10个不那么知名但很实用的Web API
11 个 CSS 知识搭配 11 个 JS 特性 (实用合集)
这篇文章我会介绍 11 在开发过程中经常遇到的 CSS 相关知识点,以及 11 个有趣亦实用的 JavaScript 特性。
用户1462769
2019/10/16
9170
增强你的移动网页体验:掌握这12个必备JavaScript API
文章列举了 12 个常用的 JavaScript API,包括 Geolocation、DeviceOrientation、Battery Status、Vibration 等等。对于每个 API,文章提供了详细的解释、示例代码和用法说明。这些 API 可以帮助开发人员在移动网页中实现诸如获取用户位置、访问设备传感器、监测电池状态、触发设备振动等功能。
前端小智@大迁世界
2023/08/16
2490
增强你的移动网页体验:掌握这12个必备JavaScript API
HTML5的这些api你知道吗?
摘要总结:本文主要介绍了移动端Web开发中一些常用的API,包括DeviceMotionEvent、DeviceOrientationEvent、Gyroscope、Compass、GPS、MediaStream和MediaRecorder,以及这些API在移动应用程序开发中的实际应用和注意事项。
IMWeb前端团队
2017/12/29
1.4K0
新型XSS总结两则
0x00 简介 近期看到了两种XSS攻击手法:一种是利用JSONP和serviceWorkers的持久性XSS,一种是移动设备中的XSS,学习后总结一下,同时也请高手多多指点。 0x01 基于JSONP和serviceWorkers的持久性XSS 对于Web攻击者来说,通常都渴望在未知用户浏览器具体类型的情况下,仍然能够顺利通过它来访问网站。甚至在浏览器被关闭,再次访问时要挂钩的回话也没有了的情况下,依旧可以访问网站,那该多好啊!实际上,这不仅是说说而已,如果联合利用未被过滤的JSONP路由、service
逸鹏
2018/04/10
7580
新型XSS总结两则
你不知道的JavaScript APIs
这个APi 可以让我们知道用户何时离开了页面。准确地说,只要页面的可见性状态发生变化,无论是用户最小化、最大化窗口还是切换标签,该API都会触发一个事件 visibilitychange 。
前端小智@大迁世界
2022/10/28
8220
你不知道的JavaScript APIs
这是一个鲜为人知的 web API,在JS现状调查[1]中,它的认知度排名倒数第四。它可以让你知道用户何时离开了页面。准确地说,只要页面的可见性状态发生变化,无论是用户最小化、最大化窗口还是切换标签页,该API都会触发一个事件。
chuckQu
2022/11/28
1K0
你不知道的JavaScript APIs
【JS】1676- 重学 JavaScript API - Page Visibility API
本文将介绍 Page Visibility API 的概念、使用方法、兼容性和实际应用案例。
pingan8787
2023/09/01
2470
【JS】1676- 重学 JavaScript API - Page Visibility API
记录一些在此之前不知道的Web API
Web API:https://developer.mozilla.org/zh-CN/docs/Web/API
房东的狗丶
2023/02/17
4430
那些你熟悉而又陌生的函数
我们最常用的是语法中的第二种 var timeoutID = scope.setTimeout(function[, delay]); 举个例子
苏南
2021/07/29
7340
JS事件流
HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件、页面的滚动事件onscroll等等,可以向文档或者文档中的元素添加事件侦听器来预订事件。想要知道这些事件是在什么时候进行调用的,就需要了解一下“事件流”的概念。
前端逗逗飞
2021/04/30
8.6K0
JS事件流
用框架的你,可能早已忽略了这些事件API
DOMContentLoaded,load,beforeunload,unload
若川
2021/01/28
1.8K0
Web 推送技术
作者:villainthr 摘自 前端小吉米 伴随着今年 Google I/O 大会的召开,一个很火的概念--Progressive Web Apps 诞生了。这代表着我们 web 端有了和原生 AP
腾讯IVWEB团队
2017/03/13
4.8K0
相关推荐
这些不常用的Web API真的有用吗? 别问,问就是有用🈶
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验