深度解读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 面向对象编程 万物皆对象
Sep 17 Javascript
通过复制Table生成word和excel的javascript代码
Jan 20 Javascript
jQuery实现的放大镜效果示例
Sep 13 Javascript
JS手机端touch事件计算滑动距离的方法示例
Oct 26 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
Aug 13 Javascript
vue-cli项目无法用本机IP访问的解决方法
Sep 20 Javascript
vue forEach循环数组拿到自己想要的数据方法
Sep 21 Javascript
微信小程序使用map组件实现解析经纬度功能示例
Jan 22 Javascript
javascript实现页面的实时时钟显示示例
Aug 06 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
Oct 28 Javascript
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
Mar 31 jQuery
vue项目支付功能代码详解
Feb 18 Vue.js
详解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你的验证码安全码?
2007/01/02 PHP
PHP实现接收二进制流转换成图片的方法
2017/01/10 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
jQuery 表单验证扩展代码(二)
2010/10/20 Javascript
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
2014/08/12 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
jquery实现简单的瀑布流布局
2016/12/11 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
Three.js利用性能插件stats实现性能监听的方法
2017/09/25 Javascript
使用vue-infinite-scroll实现无限滚动效果
2018/06/22 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
下载糗事百科的内容_python版
2008/12/07 Python
巧用python和libnmapd,提取Nmap扫描结果
2016/08/23 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
2018/02/03 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
python实现桌面气泡提示功能
2019/07/29 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
Python Map 函数的使用
2020/08/28 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)
2017/07/24 HTML / CSS
.NET面试问题集
2015/12/08 面试题
房产销售经理职责
2013/12/20 职场文书
演讲稿祖国在我心中
2014/05/04 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
工作粗心大意检讨书
2014/09/18 职场文书
2014年英语工作总结
2014/12/20 职场文书
四年级小学生评语
2014/12/26 职场文书
公司租车协议书
2015/01/29 职场文书
新学期小学班主任工作计划
2019/06/21 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书