源码学习——vue-popper

前言

在翻阅element ui的Popover弹出框组件描述时,发现el-popover与el-tooltip都是基于vue-popper开发的,勾起了我的兴趣,本节我们一起来学习下vue-popper的源码。

源码

vue-popperjs是基于poper.js开发,适用于vue的组件,这么看来再底层一点的源码其实是popper.js。在github打开相关代码,找到src文件夹,里面的popper.js.vue就是业务代码。

页面元素

组件源码非常简单,就一个vue页面,我们就从template入手先查看一下页面相关元素。

template元素很简单,最深层级只有四层,我们一层层来看:

  • component动态组件 ,组件表示的元素由参数tagName决定,tagName是props参数,默认值为span,也就是说第一层默认是span标签。
  • transition动画组件,vue的内置组件能够设置元素的离开进入动画,相关动画的属性值也都设置成了props参数。
  • transition的span标签,span包裹着一个默认插槽,用来展示弹出框内容,关键属性showPopper控制弹出框内的展示。
  • reference插槽,与transition同级,展示触发弹出框的元素。注意该插槽是具名插槽,使用时必须要加上插槽名称,上面的是默认插槽,直接填入元素即可。

处理逻辑

我们直接从props参数入手,除了上面提到过的props参数,剩下重点参数就是:

  • trigger:弹出框内容弹出方式,默认为hover,弹出方式总共只有五种,通过validator对传参进行了校验,校验方法为数组的indexOf方法。这个校验方式有很多种,如果是我,我会用includes。

源码利用switch case ,根据trigger的值给触发元素添加不同的行为事件,click、clickToToggles逻辑是一样的,md上也提到了已经将click触发给弃用了。而clickToOpen、clickToToggle都绑定了click事件。

clickToOpen:打开弹出框后只有点击弹出框外的区域才会关闭,绑定事件为doShow,直接将showPopper设置为true,当焦点不再触发元素时,点击触发doClose事件将其关闭。

clickToToggle:点击切换。绑定事件为doToggle,先阻止了冒泡与默认事件,后面直接将showPopper赋值为非。

注意上面doToggle函数中的阻止冒泡与默认事件有对应的props参数,所以用if包裹了一下。

  • options:弹框框配置项,data有默认配置项popperOptions,在created会用Object.assign 将两者合并。配置项有placement 属性,表示弹出框出现方位,该功能是通过css中的属性选择器 实现的。
    属性选择器是很有用的一个用法,不了解的建议大家好好了解一下。vue-popper基于popper.js开发,最后我们看下popper.js具体的使用方法:
  1. 引入Popper弹出器。
js 复制代码
import Popper from 'popper.js';
  1. 实例化弹出器。
js 复制代码
// 触发元素、弹出元素、配置项
this.popperJS = new Popper(this.referenceElm, this.popper, this.popperOptions);

3.监听showpopper,为true调用enableEventListeners事件,为false调用disableEventListeners事件。最后在组件销毁时调用destroy事件。

总结

以上就是vue-popper实现过程,重点就是触发元素、弹出元素,相关事件与参数都是围绕着这两部分的,popper.js占比较少,就是调用了一下实例方法。

相关推荐
VT.馒头8 分钟前
【力扣】2625. 扁平化嵌套数组
前端·javascript·算法·leetcode·职场和发展·typescript
数研小生37 分钟前
Full Analysis of Taobao Item Detail API taobao.item.get
java·服务器·前端
Shirley~~1 小时前
Vue-skills的中文文档
前端·人工智能
毎天要喝八杯水1 小时前
搭建vue前端后端环境
前端·javascript·vue.js
计算机程序设计小李同学1 小时前
幼儿园信息管理系统的设计与实现
前端·bootstrap·html·毕业设计
雨季6662 小时前
Flutter 三端应用实战:OpenHarmony “专注时光盒”——在碎片洪流中守护心流的数字容器
开发语言·前端·安全·flutter·交互
tao3556672 小时前
【用AI学前端】HTML-02-HTML 常用标签(基础)
前端·html
2601_949532842 小时前
Psello HTML Template: A Developer‘s Deep-Dive Review and Guide - Download Free
前端·windows·html·seo·wordpress·gpl
CappuccinoRose2 小时前
CSS前端布局总指南
前端·css·学习·布局·flex布局·grid布局·float布局
穿过锁扣的风2 小时前
如何操作HTML网页
前端·javascript·html