element ui的中的 toolpic组件 在 packages/tooltip目录下。

这个组件核心部分是

toolpic 分别涉略了。《main.js vue-popper.js popup.js vdom.js dom.js》等js文件

核心用到到js差不多就是main.js,vue-popper.js

其他都是element封装好都调用都公共方法

vdom.js

是找到this.$slots.default中都vode

因为this.$slots.default默认返回都是一个数组

dom.js

是添加样式,检测是否有这个样式,获取样式等一些方法, 对ie上对兼容等 有兴趣可以看看

main.js:代码

//main.js
import Popper from 'element-ui/src/utils/vue-popper';
export default {mixins: [Popper],render (h) {// 初始化beforeCreate中vue的htmlthis.newVue.node = (<divref="popper"onMouseenter={() => {this.show()}}onMouseLeave={() => {this.hide()}}v-show={this.showPopper}>{this.$slots.default}</div>)   // 抛出自定义内容做固定展示在html上return this.$slots.default[0]},beforeCreate () {// 创建一个新的Vue对象this.newVue = new Vue({data: {node: ''},render(h){return this.node},}).$mount()},mounted(){this.referenceElm = this.$el;this.referenceElm.addEventListener('mouseenter',()=>{this.show()})this.referenceElm.addEventListener('mouseleave',()=>{this.hide()})},methods: {show(){console.log('经过啦')this.showPopper = true},hide() {console.log('离开啦')this.showPopper = false}}
}
复制代码

main.js进行了简化

在生命周期beforeCreate中创建一个新对vue对象,

通过render函数初始化HTML 然后 return 一个 对象

例如:

 <el-tooltip class="item" effect="dark" content="Top Left 提示文字" placement="top-start"><el-button>上左</el-button></el-tooltip>复制代码

render中return的就是

<el-button>上左</el-button>复制代码

这快内容

vue-popper.js代码: 在这个文件的代码核心部分,elementUI也是用npm库里面的popper.js去完成 官方api再此 我这边已经黏贴了飞机票

简化后的vue-popper.js。

import popperJs from 'popper.js';
export default {data() {return {showPopper: false}},watch: {showPopper(val) {val ? this.createpopper() : this.destroyPopper();}},methods: {createpopper(){document.body.appendChild(this.$refs.popper);new popperJs(this.referenceElm,this.$refs.popper)}}
}复制代码

这是最简单调用方式实现了一个toolpic

鼠标经过和离开会展示这个toolpic

总结

1.通过main.js中生成HTML并在mounted生命周期中添加各种鼠标事件,改变showPopper的值

2.同时把当前对this.$el赋值给this.referenceElm

3.在vue-popper.js对showPopper的值进行监听,一旦showPopper的值为true时执行this.createpopper(),反之则摧毁

4.在this.createpopper()函数中popper组件需要2个参数然后把 this.$refs.popper和 this.referenceElm传过去就好了

PS:只是简单还原了这个功能,具体细节麻烦请下载elementUI

转载于:https://juejin.im/post/5c480d43e51d4551e9610111

ElementUI的组件拆解之Tooltip相关推荐

  1. [vue-element] ElementUI表格组件如何实现动态表头?

    [vue-element] ElementUI表格组件如何实现动态表头? <template v-for="item in tableColownms"> <el ...

  2. 使用继承思想,去开发一款组件(element-ui collapse组件为例子)

    最近在使用element-ui collapse组件的过程中,需要用collapse-item实现拖拽排序,原本组件满足不了,先看下组件的原形.(本文使用的element-ui是用1.4.2版本) 第 ...

  3. elementUI表格组件:自定义列模板(完整案例)

    elementUI表格组件:自定义列模板(含效果图) 所谓的自定义列模板,你也可以理解为自定义td的格式. 官方文档地址 :查看地址 页面· 效果图 · 对比 : 代码块1 · 对比:<temp ...

  4. vue路由+ elementUI表格组件:loop文章列表页enter内容页(vue路由传参userid)- 代码篇

    elementUI表格组件,response.data.newsLists列表如何循环出来?如何点击传参numId,并进入对应的内容页? 本文意图: 使用官方table组件:实现API调用:文章遍历. ...

  5. elementUI 分页组件Bug ,为什么会 infinity ?

    个人项目经验总结: 是因为后台的原因,逻辑少走了一层. 而前端页面初次加载的时候直接提交默认参数,然后后台没有按照提交的参数一致性response返回给前端,而是后台自定义的参数值返回给前端渲染的,所 ...

  6. elementUI 分页组件的使用 - 踩坑篇

    elementUI 分页组件的使用.API调用.获取服务端数据.并初始化渲染页面:(踩坑一则) 因每个公司 / 每个项目 / 客户需求 / 都各有差异,所以本例只是demo说解,并非举一反三或万能分页 ...

  7. element-ui表格组件table踩坑总结

    table组件中,基本情况简述: element框架的table组件,内容涵盖以下总结知识点,内容比较基础,知识有点交叉.对比学习更易于理解.应用和掌握. 常用UI效果,参考点: table边框设置( ...

  8. Element-ui导航组件NavMenu导航高亮设置

    Element-ui导航组件: NavMenu导航HighLight高亮设置 1. 文件navMenu.vue,部分代码参考: <template><div class=" ...

  9. ElementUI table组件,表格组件,单击单元格可编辑逻辑

    ElementUI table组件,表格组件,单击单元格可编辑逻辑 1.表格部分 <el-table:data="seatDataFilter"@cell-click=&qu ...

最新文章

  1. 《机电传动控制》学习笔记03-1
  2. radiobutton在listview中处理
  3. 图像分割python代码_SILC超像素分割算法详解(附Python代码)
  4. 软件测试书在线阅读,软件测试实用教程
  5. WORD表格排版案例之论文封面
  6. 速卖通店铺流量下滑什么原因,如何做提升?(测评补单)
  7. 使用虚拟机备份软件备份Microsoft Hyper-V 虚拟机
  8. Aria2 下载工具(转)
  9. spring源码之Mybatis扫描器
  10. cisco路由器各接口模块代表的含义是什么
  11. eclipse配置python开发环境_如何在Eclipse中配置python开发环境
  12. yum源报错 提示 Couldnt resolve host mirrorlist.centos.org
  13. VMware虚拟机Host-Only(仅主机模式)
  14. YOLOv5模型剪枝压缩
  15. 作死的神秘12行代码:分分钟让你电脑崩溃手机重启
  16. 点云旋转平移(二)—python open3d点云平移
  17. Skynet服务器框架(九) snax框架
  18. 测风雷达matlab,雷达数字中频接收机系统设计方案详细解析
  19. 区块链互联互通成为焦点
  20. 利用优化热点及新兴热点分析暴力犯罪

热门文章

  1. JVM - ZGC初探
  2. JavaScript-回调函数
  3. Java学习笔记(七)--格式化字符串及格式输出
  4. 创建一个类 new 与 不加new 有什么区别?
  5. linux挂载盘符扫描,Linux下挂载ISCSI的盘符问题
  6. html 跨域_常见跨域解决方案以及Ocelot 跨域配置
  7. 【C++】42.使用YAML文件进行参数配置、读取与生成YAML文件
  8. 学习鸟哥的Linux私房菜笔记(1)——Linux系统入门
  9. 当你「ping 一下」的时候,你知道它背后的逻辑吗?
  10. 阿里P7/P8学习路线图——技术封神之路