深度解读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 相关文章推荐
基于Jquery的简单图片切换效果
Jan 06 Javascript
javascript的原生方法获取数组中的最大(最小)值
Dec 19 Javascript
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
Dec 29 Javascript
深入理解关于javascript中apply()和call()方法的区别
Apr 12 Javascript
Javascript类型系统之undefined和null浅析
Jul 13 Javascript
Es6 写的文件import 起来解决方案详解
Dec 13 Javascript
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
Jul 17 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
Dec 25 Javascript
基于jquery实现左右上下移动效果
May 02 jQuery
详解JavaScript的BUG和错误
May 07 Javascript
Vue 监听列表item渲染事件方法
Sep 06 Javascript
使用axios请求时,发送formData请求的示例
Oct 29 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
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
无数据库的详细域名查询程序PHP版(5)
2006/10/09 PHP
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
php设计模式 Bridge (桥接模式)
2011/06/26 PHP
ueditor 1.2.6 使用方法说明
2013/07/24 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
PHP的mysqli_stmt_init()函数讲解
2019/01/24 PHP
js 事件小结 表格区别
2007/08/13 Javascript
转换json格式的日期为Javascript对象的函数
2010/07/13 Javascript
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
JavaScript事件委托的技术原理探讨示例
2014/04/17 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
JQuery radio(单选按钮)操作方法汇总
2015/04/15 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
javascript+ajax实现产品页面加载信息
2015/07/09 Javascript
Javascript类型系统之undefined和null浅析
2016/07/13 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
JS实现动画兼容性的transition和transform实例分析
2016/12/13 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
如何解决jQuery 和其他JS库的冲突
2020/06/22 jQuery
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
2020/12/04 Vue.js
学习python 之编写简单乘法运算题
2016/02/27 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
python能做哪些生活有趣的事情
2020/09/09 Python
爱情检讨书大全
2014/01/21 职场文书
大学校庆策划书
2014/01/31 职场文书
《我的伯父鲁迅先生》教学反思
2014/02/12 职场文书
什么是就业协议书
2014/04/17 职场文书
小学班主任培训方案
2014/06/04 职场文书
单位实习介绍信
2015/05/05 职场文书
运动会班级前导词
2015/07/20 职场文书
室外天线与收音机天线杆接合方法
2022/04/05 无线电
Python保存并浏览用户的历史记录
2022/04/29 Python