深度解读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 相关文章推荐
DOM下的节点属性和操作小结
May 14 Javascript
Extjs单独定义各组件的实例代码
Jun 25 Javascript
js 页面元素的几个用法总结
Nov 18 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
Apr 18 Javascript
使用jspdf生成pdf报表
Jul 03 Javascript
Bootstrap每天必学之表格
Nov 23 Javascript
Javascript基于AJAX回调函数传递参数实例分析
Dec 15 Javascript
基于Vue实现图书管理功能
Oct 17 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
Aug 07 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
Aug 15 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
Oct 17 Javascript
Nest.js环境变量配置与序列化详解
Feb 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
解析在zend Farmework下如何创立一个FORM表单
2013/06/28 PHP
php像数组一样存取和修改字符串字符
2014/03/21 PHP
PHP生成静态HTML页面最简单方法示例
2015/04/09 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
2017/01/20 PHP
如何将网页表格内容导入excel
2014/02/18 Javascript
node.js中的fs.writeSync方法使用说明
2014/12/15 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
2015/05/04 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
解决nodejs中使用http请求返回值为html时乱码的问题
2017/02/18 NodeJs
js鼠标跟随运动效果
2017/03/11 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
简单了解TypeScript中如何继承 Error 类
2019/06/21 Javascript
jquery图片预览插件实现方法详解
2019/07/18 jQuery
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
[03:23:49]2016.12.17日完美“圣”典全回顾
2016/12/19 DOTA
tensorflow更改变量的值实例
2018/07/30 Python
Python序列化与反序列化pickle用法实例
2019/11/11 Python
scrapy处理python爬虫调度详解
2020/11/23 Python
CSS3绘制不规则图形的一些方法示例
2015/11/07 HTML / CSS
HTML5中如何显示视频呢 HTML5视频播放demo
2013/06/08 HTML / CSS
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
美国最大的袜子制造商和零售商:Renfro Socks
2017/09/03 全球购物
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
公务员综合考察材料
2014/02/01 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
高考升学宴答谢词
2015/01/20 职场文书
幼儿园教师心得体会范文
2016/01/21 职场文书
ROS系统将python包编译为可执行文件的简单步骤
2021/07/25 Python
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server