elementUI el-table实现鼠标悬浮某一行,在鼠标右侧展示提示信息

背景

el-table组件中,可以通过勾选某条数据来创建单据,但是有些数据没有权限使用,就需要禁用掉勾选的功能,然后当鼠标悬浮在这一行的时候,展示类似于toolTip的提示框。

除了当鼠标悬浮在某一行,展示类似于toolTip的提示框这一条el-table是没有提供配置项的,其他的都能够通过配置完成,那我们接下来看看如何实现鼠标悬浮某一行展示提示框的需求。

实现效果

具体实现

首先el-table有提供两个事件cell-mouse-enter和cell-mouse-leave,这两个事件分别在当单元格 hover 进入时以及当单元格 hover 退出时会触发,回调函数中能接收四个参数:row, column, cell, event。

我们可以通过cell-mouse-enter事件,在鼠标进入到当前行的时候,根据第一个参数row判断当前行是否需要进行提示。如果需要提示的话,我们可以获取第四个参数event,拿到当前触发hover事件的dom元素。然后动态生成一个提示框div定位到鼠标右侧,插入到body中。

然后通过监听cell-mouse-leave事件将这个元素从body中移除。

代码如下

html 复制代码
// table组件
<el-table 
 :data="tableData" 
 style="width: 100%"
 @cell-mouse-enter="enterSelectionRows"
 @cell-mouse-leave="leaveSelectionRows"
>
   // ......
</el-table>
javascript 复制代码
// 鼠标进入表格行的回调函数
enterSelectionRows: (row:any, column:any, cell:any, event:any) => {
  if (!row.hasAuth) {
       createTips(event, row, '请先在资产平台申请对应表查询权限')
        return
     }
 }
// 鼠标离开表格行的回调函数
leaveSelectionRows: (row:any) => {
      removeTips(row)
}


// 创建toolTip
export function createTips(el:any, row:any, value:any) {
  const { id } = row
  const tooltipDom = document.createElement('div')
  tooltipDom.style.cssText = `
        display: inline-block;
        max-width: 400px;
        max-height: 400px;
        position: absolute;
        top: ${el.clientY + 5}px;
        left: ${el.clientX}px;
        padding:5px 10px;
        overflow: auto;
        font-size: 12px;
        font-family: PingFangSC-Regular, PingFang SC;
        font-weight: 400;
        color: #595959;
        background: #fff;
        border-radius: 5px;
        z-index: 19999;
        box-shadow: 0 4px 12px 1px #ccc;
      `
  tooltipDom.innerHTML = value
  tooltipDom.setAttribute('id', `tooltip-${id}`)
  // 将浮层插入到body中
  document.body.appendChild(tooltipDom)
}

// 删除tooltip
export function removeTips(row:any) {
  const { id } = row
  const tooltipDomLeave = document.querySelectorAll(`#tooltip-${id}`)
  if (tooltipDomLeave.length) {
    tooltipDomLeave.forEach(dom => {
      document.body.removeChild(dom)
    })
  }
相关推荐
酉鬼女又兒5 分钟前
零基础入门计算机组成原理:控制器章节全考点汇总 | 寄存器 + 控制存储器 + 微指令
考研·职场和发展·计算机外设
沃普天科技9 分钟前
USB显示器驱动板触摸收款机显示器收银机点菜机广告机
驱动开发·游戏·计算机外设·电脑·ar·音视频·硬件工程
Liu.77420 分钟前
Vue3结合Element Plus封装点击查看大图的自定义指令
javascript·vue.js·elementui
卢锡荣12 小时前
单芯通吃,盲插标杆 —— 乐得瑞 LDR6020,Type‑C 全场景互联 “智慧芯”
c语言·开发语言·计算机外设
代码煮茶14 小时前
Vite 5.0 新特性深度解析:更快、更干净、更未来的前端构建利器
vue.js
feifeigo12315 小时前
STM32矩阵键盘驱动(库函数版)实现
stm32·矩阵·计算机外设
Pu_Nine_918 小时前
IntersectionObserver 详解:封装 Vue 指令实现图片懒加载
前端·javascript·vue.js·性能优化
前端那点事18 小时前
Vue nextTick 超全解析|作用、使用场景、底层原理、Vue2/Vue3区别
前端·vue.js
前端那点事18 小时前
Vue面试高频:子组件能直接修改父组件数据吗?单向数据流原理+正确写法全覆盖
前端·vue.js
前端那点事18 小时前
为什么 Vue 的 template 标签不能用 v-show?底层机制+踩坑复盘+生产级解决方案
前端·vue.js