深度解读vue-resize的具体用法


Posted in Javascript onJuly 08, 2020

前言

作为一名优秀的前端来说,在平时的造火箭(拧螺丝)过程中,难免要遇到一个情况,就是当窗口resize的时候,我们要进行监听,常见的方案就是 element.addEventListener("resize", cb)

但是对于切过五彩斑斓的黑的你来说,肯定也知道,如果在短时间内多次resize窗口大小,那么我们这个的cb就会被调用多次,这样来说,性能太差了,这时我们会根据我们的业务需要,添加节流或者防抖,但这真的完美了吗

首先,我们要自己手动添加监听函数,其次注意性能问题,包括上面提到的防抖节流,还有在不需要的时候卸载监听函数,最后一个点就是,我们要在我们的元素上监听,或许这里有人说,又要马儿跑又让马儿不吃草,你想怎样,别急,接下来,我们就介绍 vue-resize 这个库

初步了解vue-resize

这个库是我在使用vue-lazyload的时候偶然发现的,因为里面就是用了 vue-resize 来进行resize事件的监听,使用方法也很简单,在position不为static的元素下面使用这个component就可以了

<template>
 <div class="demo">
 <h1>Hello world!</h1>
 <resize-observer @notify="handleResize" />
 </div>
</template>

<script>
export default {
 methods: {
 handleResize () {
  console.log('resized')
 }
 }
}
</script>

<style scoped>
.demo {
 position: relative;
}
</style>

到这里或许还有人说有什么神奇地方,我们这里看看下图生成的dom结构

深度解读vue-resize的具体用法

其中id为resized是我们要监听的元素,class为resize-observer是组件生成的dom,但是我们的resize监听不是挂载在上面,是里面的object的吗,也不是,而是在object里面的window里面,有点类似于iframe,这样做有什么好处呢,相当于我们把resize的监听放到一个sandbox里面,不受外层的干扰,而对于上层来说,我只需要监听resize就好了,而不用担心它被篡改

深度解读vue-resize的具体用法

再说一句

基本上我们已经知道vue-resize带来的好处,沙箱保护,全自动卸载,对于使用者来说,唯一的要求,就是元素的position不为static,这个库远不止这点干货,毕竟作者是vue team里面的。

首先我们可以看到,这个组件添加resize-observer,它的tabindex 为-1,这意味着,tab键不会调到这个元素上

深度解读vue-resize的具体用法

同时我们看下它的样式,scoped和宽度高度跟父元素一样没什么好说的了,我们需要注意的是,z-index为-1,background-color: transparent;pointer-events: none;opacity:0,基本把各种可能的结果都考虑进去了

深度解读vue-resize的具体用法

然后,是object元素的创建,aria-hidden为true和tabindex为-1,可以说对ARIA11的处理,真的很细节

深度解读vue-resize的具体用法

结语

可以看出,小小的resize还有这么大的学问在里面,同时对于细节的处理真的很好,路漫漫其修远兮,总有一天,希望会切出五光十色的白

到此这篇关于深度解读vue-resize的具体用法的文章就介绍到这了,更多相关vue-resize解读内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
免费空间广告万能消除代码
Sep 04 Javascript
可实现多表单提交的javascript函数
Aug 01 Javascript
Javascript 的addEventListener()及attachEvent()区别分析
May 21 Javascript
根据出生日期自动取得星座的js代码
Jul 20 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
Feb 03 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
Jul 21 Javascript
javascript实现checkbox复选框实例代码
Jan 10 Javascript
AngularJS 使用 UI Router 实现表单向导
Jan 29 Javascript
jQuery Mobile中的button按钮组件基础使用教程
May 23 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
May 25 Javascript
Vue 中使用 CSS Modules优雅方法
Apr 09 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
Jan 21 Javascript
详解React 条件渲染
Jul 08 #Javascript
webpack5 联邦模块介绍详解
Jul 08 #Javascript
实例讲解React 组件
Jul 07 #Javascript
JavaScript eval()函数定义及使用方法详解
Jul 07 #Javascript
详解React 元素渲染
Jul 07 #Javascript
JS数据类型判断的几种常用方法
Jul 07 #Javascript
JavaScript实现像雪花一样的Hexaflake分形
Jul 07 #Javascript
You might like
php中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
高质量PHP代码的50个实用技巧必备(上)
2016/01/22 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
javascript iframe内的函数调用实现方法
2009/07/19 Javascript
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
Nodejs中自定义事件实例
2014/06/20 NodeJs
jQuery中:button选择器用法实例
2015/01/04 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
jQuery表单事件实例代码分享
2016/08/18 Javascript
js防刷新的倒计时代码 js倒计时代码
2017/09/06 Javascript
使用socket.io实现简单聊天室案例
2018/01/02 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
python中scikit-learn机器代码实例
2018/08/05 Python
python实现Zabbix-API监控
2018/09/17 Python
对python读取zip压缩文件里面的csv数据实例详解
2019/02/08 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
2019/05/06 Python
Python实现ElGamal加密算法的示例代码
2020/06/19 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
2020/11/24 Python
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
电子商务专业毕业生自荐书
2014/06/22 职场文书
项目申请汇报材料
2014/08/16 职场文书
大学生党员批评与自我批评范文
2014/10/14 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
大学生在校表现评语
2014/12/31 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书