深度解读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 相关文章推荐
JavaScript 组件之旅(二)编码实现和算法
Oct 28 Javascript
自动刷新网页,自动刷新当前页面,JS调用
Jun 24 Javascript
js实现文章文字大小字号功能完整实例
Nov 01 Javascript
JS Array.slice 截取数组的实现方法
Jan 02 Javascript
JS遍历页面所有对象属性及实现方法
Aug 01 Javascript
Angular2表单自定义验证器的实现
Oct 19 Javascript
Angularjs中的ui-bootstrap的使用教程
Feb 19 Javascript
JavaScript 实现 Tab 点击切换实例代码
Mar 25 Javascript
js+html获取系统当前时间
Nov 10 Javascript
webpack4 入门最简单的例子介绍
Sep 05 Javascript
vue遍历对象中的数组取值示例
Nov 07 Javascript
详解vue 中 scoped 样式作用域的规则
Sep 14 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
在Linux系统的服务器上隐藏PHP版本号的方法
2015/06/06 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
JavaScript插入动态样式实现代码
2012/02/22 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
jquery实现简单的自动播放幻灯片效果
2015/06/13 Javascript
bootstrap suggest搜索建议插件使用详解
2017/03/25 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
2017/06/22 Javascript
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
vue解决花括号数据绑定不成功的问题
2019/10/30 Javascript
小程序使用wxs解决wxml保留2位小数问题
2019/12/13 Javascript
微信小程序聊天功能的示例代码
2020/01/13 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
Vue中key的作用示例代码详解
2020/06/10 Javascript
详解webpack的文件监听实现(热更新)
2020/09/11 Javascript
jQuery实现放大镜案例
2020/10/19 jQuery
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
python 二维数组90度旋转的方法
2019/01/28 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
python中字符串的编码与解码详析
2020/12/03 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
H5混合开发app如何升级的方法
2018/01/10 HTML / CSS
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
英国综合网上购物商城:The Hut
2018/07/03 全球购物
Stührling手表官方网站:男女高品质时尚手表的领先零售商
2021/01/07 全球购物
公务员职务工作的自我评价
2013/11/01 职场文书
工伤赔偿协议书
2014/04/15 职场文书
个人授权委托书样本
2014/09/13 职场文书
新郎结婚保证书
2015/02/26 职场文书
妇产科护理心得体会
2016/01/22 职场文书
创业计划书之书店
2019/09/10 职场文书
Pytorch 如何实现常用正则化
2021/05/27 Python
MSSQL基本语法操作
2022/04/11 SQL Server