前言

以下几个API,在web开发中可以简化我们一部分交互操作。

Fullscreen API

有时候我们想要全屏预览的效果,比如类似于图片预览、幻灯片播放等。全屏API是一个很好的选择。

基本用法

  • 打开全屏
   element.requestFullscreen().then(() => {
// 成功的处理
}).catch(err => {
// 失败的处理
})
  • 退出全屏
   element.exitFullscreen().then(() => {
// 成功的处理
}).catch(err => {
// 失败的处理
})
  • 事件

fullscreenchange监听元素全屏、退出全屏的变化;fullscreenerror监听全屏请求失败。

注意事项

iframe中,如果要手动调用fullscreen API,可能会遇到错误Document is not active,是因为没有给iframe元素赋予fullscreen的权限。此时应该给iframe增加属性allowfullscreen

MutationObserver

MutationObserver目前是DOM变化监听神器。主要原因有二:

  1. 异步监听DOM变化,不影响页面性能
  2. 可以细粒度的监听DOM内容变化,元素、属性、文本的变化都能检测到,且能够比较出新旧值的差异

在一定程度上,使用它能够做到文档内容的撤销、重做。

基本用法

  • 实例化

var observerInstance = new MutationObserver(function (mutations, observer) {
// mutations为变化内容描述
mutations.forEach(function(mutation) {
console.log(mutation);
});
});

每次DOM变化,都会触发实例化中的回调方法

  • 方法
  1. 添加元素监听
// 监听body中元素的变化
observerInstance.observer(document.body, {
attributes: true, // 属性
characterData: true, // 文本
childList: true, // 子节点
subtree: true, // 后代节点
attributeOldValue: true, // 属性旧值
characterDataOldValue: true // 旧文本
})
  1. 移除元素监听
observerInstance.disconnect()

调用此方法后,将停止对已添加元素的监听

  1. 清楚变动记录
observerInstance.takeRecords()

因为监听是异步的,不是每次DOM变动都实时触发,此方法的调用,会使历史缓存的变化信息被清空。

IntersectionObserver

IntersectionObserverMutationObserver使用方法比较类似,原理也有点类似,只是前者的主要作用是监测元素的可见性变化,后者主要是监测DOM的变化。两者都是异步操作,不会影响页面性能。

利用此API,实现上拉列表刷新,下拉加载更多将会变得非常简单。

基本用法

  • 实例化

var observerInstance = new IntersectionObserver(function (entries) {
// intersectionRatio代表元素的可见比例,可见大于0,不可见小于等于0
if (entries[0].intersectionRatio <= 0) return; loadItems(10);
}, {
threshold: [0, 0.25, 0.5, 0.75, 1] // 监听对象的交叉区域与边界区域的比率,默认是0
});
  • 方法
  1. 添加元素监听
// 监听特定元素,每次调用都会重新添加一个元素的监听
observerInstance.observer(document.getElement('item1'))
  1. 移除元素监听
observerInstance.disconnect()

调用此方法后,将停止对已添加元素的监听

  1. 返回所有观察目标数组
let IntersectionObserverEntryList = observerInstance.takeRecords()
  1. 停止观察特定元素
observerInstance.unobserver()

参考文件

Fullscreen API与DOM监听API的更多相关文章

  1. ResizeObserver - 元素resize监听API

    Motivation 响应式网站/Web应用程序 根据视口大小调整内容展示方式.这通常通过CSS和media查询来完成.当CSS表现不好我们会使用Javascript. 比如document.addE ...

  2. ResizeObserver - 元素resize监听API ResizeObserver

    Motivation 响应式网站/Web应用程序 根据视口大小调整内容展示方式.这通常通过CSS和media查询来完成.当CSS表现不好我们会使用Javascript. 比如document.addE ...

  3. Dom监听组合按键

    JS监听组合按键   有些时候,我们需要在网页上,增加一些快捷按键,方便用户使用一些常用的操作,比如:保存,撤销,复制.粘贴等等. 下面简单梳理一下思路: 我们所熟悉的按键有这么集中类型: 单独的按键 ...

  4. arcgis javascript api 事件的监听及移除

    On Style Events 方式 var mapExtentChange = map.on("extent-change", changeHandler); function ...

  5. JS一个非常经典的问题:在遍历数组时对DOM监听事件,索引值将始终等于遍历结束后的值

    一个简单的Tab选项卡点击事件. <style type="text/css"> ul{padding:0;margin:0;} .tab{width:400px;} ...

  6. dom监听事件class

    layui.use(['layer', 'form'], function(){ var layer = layui.layer ,form = layui.form; var $ = layui.j ...

  7. IE与DOM的事件监听

    IE 事件监听 标准DOM不支持   注意几点: window.onload attachEvent detachEvent 标准DOM监听,ie不支持

  8. H5C3--语义标签以及语义标签IE8兼容,表单元素新属性,度量器,自定义属性,dataList,网络监听,文件读取

    HTML5新增标签以及HTML5新增的api     1.H5并不是新的语言,而是html语言的第五次重大修改--版本     2.支持:所有的主流浏览器都支持h5.(chrome,firefox,s ...

  9. Blazor和Vue对比学习(基础1.8):Blazor中实现计算属性和数据监听

    1.7章<传递UI片断>,需要做几个案例,这部分暂停消化几天.我们先把基础部分相对简单的最后两章学习了. 计算属性和数据监听是Vue当中的概念,本质上都是监听数据的变化,然后做出响应.两者 ...

随机推荐

  1. Eclipse中java文件边的黄色数据库标志变成了蓝色小勾,导致文件修改后无法显示在Git staging窗口中,修改无法提交,怎么解决?

    出现这个问题的原因是误点击了右键点文件->Team->Advanced->Assume Unchanged, 导致结果是文件修改了无法显示在Git staging窗口中,自然无法提交 ...

  2. AutoGenerator自动生成代码

    程序猿学社: https://blog.csdn.net/qq_16855077/article/details/105316295

  3. centos7图形化安装oracle11g

    #设置主机名 hostnamectl set-hostname oracle #yum安装 yum -y install unzip vim* bash-completion bash-complet ...

  4. PHP对象传值 - 引用传值

    对象传值本质上是引用传值,将一个对象变量($a)赋值给另个变量($b),实际上是将$a存储的对象内存引用地址赋值$b,此时两个变量指向的就是一个对象.其中一个变量发送改变,另一个也会跟着改变.和引用变 ...

  5. jmeter服务器监控磁盘IO、网络-PerfMon Metrics Collector

    1.jmeetr客户端安装jp@gc - PerfMon Metrics Collector 先安装jmeter-plugins 启动jmeter ——> 客户端选项 ——> jmeter ...

  6. Azure技术系列之Redis篇---第一章数据缓存

    嘈杂和忙碌的生活占据占据了生活的每一天,好久没有静下心来对自己喜欢的技术进行归纳总结了.痛定思痛,今天开始开荒,把之前研究的技术进行归纳总结,先从Azure的Redis的开发技术开始. Azure 的 ...

  7. pytest文档1-pytest+Allure+jenkins+邮箱发送

    前言: 1.pytest+allure是目前很多公司使用较多的一种报告样式,因为它更详细,各种指标更直观(简单的说就是看着更高大上,更能装X). 环境准备: 1.Windows10 2.Allure ...

  8. 【翻译】.NET 5 RC1发布

    9月14日,.NET5发布了(Release Candidate)RC1版本,RC的意思是指我们可以进行使用,并且RC版本得到了支持,该版本是.NET5.0的最终版本,也是11月正式版本之前两个RC版 ...

  9. Openstack 一直在调度中解决

    查看日志/var/log/nova/nova-scheduler.log,/var/log/nova/nova-compute.log ,均无报错 查看/var/log/nova/nova-condu ...

  10. vue2.5开发去哪儿了流程

    初始化项目 在 src/assets 中添加样式初始化文件 reset.css ; border.css 本地引入取消延迟300毫秒的控件 cnpm i fastclick -S 在mian.js中引 ...