深度解读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弹出窗口插件 LeanModal的使用方法
Mar 10 Javascript
JavaScript运行时库属性一览表
Mar 14 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
Apr 04 Javascript
javascript闭包的理解
Apr 01 Javascript
jquery简单实现网页层的展开与收缩效果
Aug 07 Javascript
Bootstrap Navbar Component实现响应式导航
Oct 08 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
Nov 17 Javascript
Smartour 让网页导览变得更简单(推荐)
Jul 19 Javascript
vue项目使用.env文件配置全局环境变量的方法
Oct 24 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
Apr 07 Javascript
JS实现图片幻灯片效果代码实例
May 21 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
Aug 30 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
Dedecms常用函数解析
2008/02/01 PHP
提高PHP编程效率的53个要点(经验小结)
2010/09/04 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
2011/10/27 PHP
destoon官方标签大全
2014/06/20 PHP
Linux中为php配置伪静态
2014/12/17 PHP
PHP开发中常用的十个代码样例
2016/02/02 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
客户端js判断文件类型和文件大小即限制上传大小
2013/11/20 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
2014/01/13 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
使用Web Uploader实现多文件上传
2016/06/08 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
2016/08/17 Javascript
NodeJS实现微信公众号关注后自动回复功能
2017/05/31 NodeJs
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
Node.js连接Sql Server 2008及数据层封装详解
2018/08/27 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
JavaScript中filter的用法实例分析
2019/02/27 Javascript
详解vue+axios给开发环境和生产环境配置不同的接口地址
2019/08/16 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
react的hooks的用法详解
2020/10/12 Javascript
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
深入理解Python爬虫代理池服务
2018/02/28 Python
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
美国家居装饰和豪华家具购物网站:One Kings Lane
2018/12/24 全球购物
写出二分查找算法的两种实现
2013/05/13 面试题
幼儿园家长评语
2014/02/10 职场文书
保护环境倡议书300字
2014/05/19 职场文书
政风行风整改报告
2014/11/06 职场文书
vue引入Excel表格插件的方法
2021/04/28 Vue.js
vue使用watch监听属性变化
2022/04/30 Vue.js
图神经网络GNN算法
2022/05/11 Python
Apache自带的ab压力测试工具的实现
2022/07/23 Servers