使用vue-seamless-scroll滚动表格数据,el-tooltip失效,一部分内容无法显示弹窗

问题:
表格数据需要滚动展示,表格内容由于过长使用省略号进行展示,鼠标移上去显示文本内容。滚动展示使用vue-seamless-scroll组件,由于vue-seamless-scroll通过直接复制div,通过两个div的交替移动使得表格数据滚动展示,因此原本的div鼠标移上去能够显示el-tooltip,复制的div鼠标移上去没有反应。
解决措施:
1、去除el-tooltip组件,使用事件代理的方式,显示文本内容弹窗

目前

  • 当前html结构:
<vue-seamless-scroll  :data="tableList">
<table ref="table-box">
          <tr v-for="(item,index) in tableList" :key="index">
            <td>{{item.date}}</td>
            <td>{{item.Naeme}}</td>
            <td >
	            <el-tooltip
	                  class="item yg_cursor"
	                  effect="dark"
	                  :content="item.content"
	                  placement="top"
	                  visible-arrow="true"
	                  popper-class="pop-class1"
	              >{{item.content}}</el-tooltip>
              </td>
          </tr>
        </table>
</vue-seamless-scroll>
  • 使用了vue-seamless-scroll组件之后的页面上显示的html结构
<div>
	//第一个原本的div,鼠标移上去可以显示弹窗
	<div>
		<table >
          <tr >
            <td>20220504</td>
            <td>名字</td>
            <td>文本内容</td>
          </tr>
        </table>
    </div>
    //第二个复制的div,鼠标移上去不可以显示弹窗
    <div>
		<table >
          <tr >
            <td>20220504</td>
            <td>名字</td>
            <td>文本内容</td>
          </tr>
        </table>
    </div>
</div>

解决后:

  • 采用事件代理方式监听鼠标移到content上显示弹窗,在最外层添加@mouseover、@mouseout方法,添加了class="table-content"标识,方便后续判断el是否在content的<td>标签上,增加了ref="table-box"方便获取表格高度;增加一个div用来显示文本内容
//增加一个div用来显示文本内容
<div ref="vc-tooltip" style="position: absolute;display: none" class="tooltip-box"></div>

<vue-seamless-scroll  :data="tableList" @mouseover.native="handleMouseover($event)" @mouseout.native="handleMouseout($event)">
<table ref="table-box">
          <tr v-for="(item,index) in tableList" :key="index">
            <td>{{item.date}}</td>
            <td>{{item.Naeme}}</td>
            <td class="table-content">{{item.content}}</td>
          </tr>
        </table>
</vue-seamless-scroll>
  • 在@mouseover、@mouseout方法中
handleMouseover(el){
		//判断el是否在content的`<td>`标签上
      if(el.target.className.includes('table-content'))
      {
        el.target.style.cursor='pointer'
        //el所在div的transform在y轴上的移动px
        let h=parseFloat(this.$refs["table-box"].parentElement.parentElement.style.transform.replaceAll('translate(0px,','').replace('px)',''))
        //显示div
        this.$refs["vc-tooltip"].style.display=''
        this.$refs["vc-tooltip"].innerHTML=el.target.innerHTML
        this.$refs["vc-tooltip"].style.left=el.target.offsetLeft-this.$refs["vc-tooltip"].offsetWidth/2+'px'
        //判断el所在的div后面是否有元素,有则为第一个div
        if(el.target.parentElement.parentElement.parentElement.nextSibling!=null)
        {
          this.$refs["vc-tooltip"].style.top=el.target.offsetTop+h+'px'
        }
        else {
        //当el所在div为第二个即最后一个,弹窗的top还需加上上一个div的高度
          this.$refs["vc-tooltip"].style.top=el.target.offsetTop+h+this.$refs["table-box"].offsetHeight+'px'
        }
      }
    },
    handleMouseout(el){
      if(el.target.className.includes('table-content'))
      {
        this.$refs["vc-tooltip"].style.display='none'
      }
    },
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Vue中实现带有固定表头和滚动效果的滚动表格,你可以按照以下步骤进行操作: 1. 首先,创建两个`el-table`组件。第一个`el-table`用于显示固定的表头,而第二个`el-table`则放置在一个滚动组件内,并用于显示滚动的表体。 [1] 2. 隐藏第一个`el-table`的表体部分,以使其只显示表头。这可以通过设置`show-header`属性为`false`来实现。 [1] 3. 隐藏第二个`el-table`的表头部分,同时将其放置在一个具有固定高度的滚动组件中(例如使用`vue-seamless-scroll`插件)。这样,整个表格都会有滚动效果。 [1 [2] 4. 使用`vue-seamless-scroll`插件,你需要在项目中安装该插件。通过运行命令`npm install vue-seamless-scroll --save`来安装插件。 [2] 5. 在`main.js`文件中,引入并注册`vue-seamless-scroll`插件。 [2] 综上所述,你可以按照以上步骤在Vue中实现带有固定表头和滚动效果的滚动表格。如果需要更详细的代码示例和使用说明,你可以参考`vue-seamless-scroll`的GitHub开源地址。 [2 [3<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [vue3 el-table结合seamless-scroll实现表格数据滚动](https://blog.csdn.net/wkh___/article/details/125638796)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [【el-table固定表格头循环滚动vue结合vue-seamless-scroll操作表格自动滚动效果](https://blog.csdn.net/weixin_50790427/article/details/121698352)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值