Fullscreen API与DOM监听API
前言
以下几个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
变化监听神器。主要原因有二:
- 异步监听
DOM
变化,不影响页面性能 - 可以细粒度的监听
DOM
内容变化,元素、属性、文本的变化都能检测到,且能够比较出新旧值的差异
在一定程度上,使用它能够做到文档内容的撤销、重做。
基本用法
- 实例化
var observerInstance = new MutationObserver(function (mutations, observer) {
// mutations为变化内容描述
mutations.forEach(function(mutation) {
console.log(mutation);
});
});
每次DOM
变化,都会触发实例化中的回调方法
- 方法
- 添加元素监听
// 监听body中元素的变化
observerInstance.observer(document.body, {
attributes: true, // 属性
characterData: true, // 文本
childList: true, // 子节点
subtree: true, // 后代节点
attributeOldValue: true, // 属性旧值
characterDataOldValue: true // 旧文本
})
- 移除元素监听
observerInstance.disconnect()
调用此方法后,将停止对已添加元素的监听
- 清楚变动记录
observerInstance.takeRecords()
因为监听是异步的,不是每次DOM
变动都实时触发,此方法的调用,会使历史缓存的变化信息被清空。
IntersectionObserver
IntersectionObserver
与MutationObserver
使用方法比较类似,原理也有点类似,只是前者的主要作用是监测元素的可见性变化,后者主要是监测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
});
- 方法
- 添加元素监听
// 监听特定元素,每次调用都会重新添加一个元素的监听
observerInstance.observer(document.getElement('item1'))
- 移除元素监听
observerInstance.disconnect()
调用此方法后,将停止对已添加元素的监听
- 返回所有观察目标数组
let IntersectionObserverEntryList = observerInstance.takeRecords()
- 停止观察特定元素
observerInstance.unobserver()
参考文件
Fullscreen API与DOM监听API的更多相关文章
- ResizeObserver - 元素resize监听API
Motivation 响应式网站/Web应用程序 根据视口大小调整内容展示方式.这通常通过CSS和media查询来完成.当CSS表现不好我们会使用Javascript. 比如document.addE ...
- ResizeObserver - 元素resize监听API ResizeObserver
Motivation 响应式网站/Web应用程序 根据视口大小调整内容展示方式.这通常通过CSS和media查询来完成.当CSS表现不好我们会使用Javascript. 比如document.addE ...
- Dom监听组合按键
JS监听组合按键 有些时候,我们需要在网页上,增加一些快捷按键,方便用户使用一些常用的操作,比如:保存,撤销,复制.粘贴等等. 下面简单梳理一下思路: 我们所熟悉的按键有这么集中类型: 单独的按键 ...
- arcgis javascript api 事件的监听及移除
On Style Events 方式 var mapExtentChange = map.on("extent-change", changeHandler); function ...
- JS一个非常经典的问题:在遍历数组时对DOM监听事件,索引值将始终等于遍历结束后的值
一个简单的Tab选项卡点击事件. <style type="text/css"> ul{padding:0;margin:0;} .tab{width:400px;} ...
- dom监听事件class
layui.use(['layer', 'form'], function(){ var layer = layui.layer ,form = layui.form; var $ = layui.j ...
- IE与DOM的事件监听
IE 事件监听 标准DOM不支持 注意几点: window.onload attachEvent detachEvent 标准DOM监听,ie不支持
- H5C3--语义标签以及语义标签IE8兼容,表单元素新属性,度量器,自定义属性,dataList,网络监听,文件读取
HTML5新增标签以及HTML5新增的api 1.H5并不是新的语言,而是html语言的第五次重大修改--版本 2.支持:所有的主流浏览器都支持h5.(chrome,firefox,s ...
- Blazor和Vue对比学习(基础1.8):Blazor中实现计算属性和数据监听
1.7章<传递UI片断>,需要做几个案例,这部分暂停消化几天.我们先把基础部分相对简单的最后两章学习了. 计算属性和数据监听是Vue当中的概念,本质上都是监听数据的变化,然后做出响应.两者 ...
随机推荐
- 跟着尚硅谷系统学习Docker-【day04】
day04-20200716 p18.docker容器数据卷 docker容器中的数据,做持久化. 容器关闭以后容器内的数据就没有了. 保存到数据库或者服务器宿主机里面. 作用:容器间可以 ...
- 按照BNF语法重新写就的JsonAnalyzer2
本例源码:https://files.cnblogs.com/files/heyang78/JsonAnalyzer2-20200525-01.rar 自从按BNF重新书写了算术表达式解析(https ...
- python基础一(安装、变量、循环、git)
一.开发语言分类 系统的开发语言有java.c++.c#.python.ruby.php等等,开发语言可分为编译型语言和解释型语言. 编译型语言就是写好代码之后就把代码编译成二进制文件,运行的时候运行 ...
- 吴恩达《深度学习》-第三门课 结构化机器学习项目(Structuring Machine Learning Projects)-第一周 机器学习(ML)策略(1)(ML strategy(1))-课程笔记
第一周 机器学习(ML)策略(1)(ML strategy(1)) 1.1 为什么是 ML 策略?(Why ML Strategy?) 希望在这门课程中,可以教给一些策略,一些分析机器学习问题的方法, ...
- 教你一招Linux下文本比对方法
我们在写代码的过程中,免不了会对代码进行一些修修改改.但经常会出现改着改着,就不知道改完后与源文件的差异是怎样的.这里,我们就需要一个文本比对工具来进行文本比对. 有经验的程序员都知道,Windows ...
- linux定时重启服务器
需求说明 系统配置低了,且应用程序内一直在执行定时任务,在程序运行一段时间后,发现接口请求会变得很慢,需要每天定时凌晨重启服务器 脚本实现 1. linux 终端输入crontab -e,添加定时任务 ...
- Oracle数据库sqlldr工具的使用
sqlldr导入文本内容到数据库表时,需要指定一个ctl文件(控制文件),通过该文件来完成数据的导入. 1 首先创建一个表student create table student( stu_id nu ...
- JDK13环境变量配置
第一步:下载JDK(开发工具包) JDK分为OracleJDK和OpenJDK下面简要说明 OracleJDK 部分代码闭源.商业收费 OpenJDK 开放源码.商业免费 两者大部分代码是共用的(除闭 ...
- v-if和v-show的区别与使用
1.共同点: v-if 和 v-show 都能实现元素的显示隐藏. 2.不同点: v-if显示隐藏是将dom元素整个添加或删除,v-show元素隐藏时,会在dom节点中把该元素设置css属性为disp ...
- 【转】Locust性能-零基础入门系列(2) -重写wait_time
在虚拟模拟的时候,可能对等待时间有更高的要求,比如假如有这么一个场景要求:某任务要求每被执行1次,那么下次的等待时间就1秒钟.这种情况,是可以实现的,这也就体现了Locust的灵活性.可编程性,很多比 ...