深度解读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 实现父窗口引用弹出窗口的值的脚本
Aug 07 Javascript
csdn 博客的css样式 v3
Feb 24 Javascript
javascript函数定义的几种区别小结
Jan 06 Javascript
Jquery Ajax方法传值到action的方法
May 11 Javascript
js仿土豆网带缩略图的焦点图片切换效果实现方法
Feb 23 Javascript
JS给Textarea文本框添加行号的方法
Aug 20 Javascript
基于jQuery通过jQuery.form.js插件实现异步上传
Dec 13 Javascript
JavaScript数据结构与算法之集合(Set)
Jan 29 Javascript
Bootstrap carousel轮转图的使用实例详解
May 17 Javascript
基于AngularJS的拖拽文件上传的实例代码
Jul 15 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
Oct 16 Javascript
基于js实现的图片拖拽排序源码实例
Nov 04 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
咖啡知识大全
2021/03/03 新手入门
PHP Pear 安装及使用
2009/03/19 PHP
linux下编译安装memcached服务
2014/08/03 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
js 编程笔记 无名函数
2011/06/28 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
jquery可见性过滤选择器使用示例
2013/06/24 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
javascript校验价格合法性实例(必须输入2位小数)
2014/05/05 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
基于jQuery实现最基本的淡入淡出效果实例
2015/02/02 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
2015/08/05 Javascript
Angular2 父子组件数据通信实例
2017/06/22 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
小程序实现列表删除功能
2018/10/30 Javascript
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
2019/09/10 jQuery
javascript自定义右键菜单插件
2019/12/16 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
[02:55]含熏伴清风,风行者至宝、屠夫身心及典藏宝瓶二展示
2020/09/08 DOTA
Python通过select实现异步IO的方法
2015/06/04 Python
python实现获取Ip归属地等信息
2016/08/27 Python
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
对python pandas读取剪贴板内容的方法详解
2019/01/24 Python
Python实现寻找回文数字过程解析
2020/06/09 Python
python virtualenv虚拟环境配置与使用教程详解
2020/07/13 Python
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
员工拓展培训方案
2014/02/15 职场文书
基督教婚礼主持词
2014/03/14 职场文书
毕业生应聘求职信
2014/07/10 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
对Keras自带Loss Function的深入研究
2021/05/25 Python
css弧边选项卡的项目实践
2023/05/07 HTML / CSS