深度解读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 相关文章推荐
js 页面输出值
Nov 30 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
Jun 02 Javascript
js实现页面跳转重定向的几种方式
May 29 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
May 12 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
May 30 Javascript
浅谈JavaScript函数的四种存在形态
Jun 08 Javascript
基于JS代码实现实时显示系统时间
Jun 16 Javascript
AngularJS入门教程之Helloworld示例
Dec 25 Javascript
JS实现页面打印(整体、局部)
Aug 18 Javascript
详细分析jsonp的原理和实现方式
Nov 20 Javascript
JavaScript中this函数使用实例解析
Feb 21 Javascript
详解Vue3使用axios的配置教程
Apr 29 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
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
php获取mysql字段名称和其它信息的例子
2014/04/14 PHP
php中curl使用指南
2015/02/05 PHP
Yii rules常用规则示例
2016/03/15 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
JavaScript模块随意拖动示例代码
2014/05/27 Javascript
用js通过url传参把数据从一个页面传到另一个页面
2014/09/01 Javascript
js和jquery如何获取图片真实的宽度和高度
2014/09/28 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
2017/01/22 Javascript
vue-cli3 从搭建到优化的详细步骤
2019/01/20 Javascript
Vue中rem与postcss-pxtorem的应用详解
2019/11/20 Javascript
JavaScript如何判断对象有某属性
2020/07/03 Javascript
jQuery冲突问题解决方法
2021/01/19 jQuery
Python sys.path详细介绍
2013/10/17 Python
python实现哈希表
2014/02/07 Python
Python多线程编程(七):使用Condition实现复杂同步
2015/04/05 Python
Django卸载之后重新安装的方法
2017/03/15 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
编写多线程Python服务器 最适合基础
2018/09/14 Python
用pycharm开发django项目示例代码
2018/10/24 Python
python使用插值法画出平滑曲线
2018/12/15 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
2019/07/31 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
Selenium向iframe富文本框输入内容过程图解
2020/04/10 Python
python中Django文件上传方法详解
2020/08/05 Python
《植物妈妈有办法》教学反思
2014/02/25 职场文书
大学四年个人的自我评价
2014/02/26 职场文书
五分钟演讲稿
2014/04/30 职场文书
2015年母亲节寄语
2015/03/23 职场文书
Win10防火墙白名单怎么设置?Win10添加防火墙白名单方法
2022/04/06 数码科技