深度解读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 获取表单text,areatext,radio,checkbox,select值的代码
Nov 12 Javascript
判断客户端浏览器是否安装了Flash插件的多种方法
Aug 11 Javascript
Javascript中浮点数相乘的一个解决方法
Jun 03 Javascript
iframe调用父页面函数示例详解
Jul 17 Javascript
JQuery中DOM事件合成用法实例分析
Jun 13 Javascript
Bootstrap Multiselect 常用组件实现代码
Jul 09 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
Dec 27 jQuery
浅谈实现vue2.0响应式的基本思路
Feb 13 Javascript
jQuery实现购物车的总价计算和总价传值功能
Nov 28 jQuery
vue使用video.js进行视频播放功能
Jul 18 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
Sep 04 Javascript
Element图表初始大小及窗口自适应实现
Jul 10 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中将数组转成XML格式的实现代码
2011/08/08 PHP
Windows7下的php环境配置教程
2015/02/28 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
PHP获取当前文件的父目录方法汇总
2016/07/21 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
2016/11/25 PHP
jqPlot Option配置对象详解
2009/07/25 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
jquery聚焦文本框与扩展文本框聚焦方法
2012/10/12 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
js取消单选按钮选中示例代码
2013/11/14 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
2015/08/17 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
微信小程序用户授权弹窗 拒绝时引导用户重新授权实现
2019/07/29 Javascript
wxpython 学习笔记 第一天
2009/03/16 Python
动态创建类实例代码
2009/10/07 Python
Python中多线程及程序锁浅析
2015/01/21 Python
Python使用Django实现博客系统完整版
2020/09/29 Python
利用python对Excel中的特定数据提取并写入新表的方法
2018/06/14 Python
python 实现selenium断言和验证的方法
2019/02/13 Python
python操作日志的封装方法(两种方法)
2019/05/23 Python
如何通过Python实现标签云算法
2019/07/02 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
如何基于Python实现word文档重新排版
2020/09/29 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
自荐信如何“自荐”
2013/10/24 职场文书
沙滩主题婚礼活动策划方案
2014/09/15 职场文书
2015年乡镇信访工作总结
2015/04/07 职场文书
职工宿舍管理制度
2015/08/05 职场文书
python Tkinter的简单入门教程
2021/04/11 Python
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技