vue-tippy优秀悬浮框插件的两种使用方式(解决elementui的tooltip不及时消失及定位出错问题,使用el-progress进度条模仿柱状图,tippy模仿echarts悬浮框)

tippy.js是一个优秀的悬浮框插件,官方通道点击tippyjs,当我们使用elementui中的悬浮框时经常会出现悬浮框消失不及时影响操作或者悬浮框错位的情况,tippy就很好地解决了这个问题,下面废话不多说,开始介绍使用方法。

安装

npm:
npm install --save vue-tippy
yarn:
yarn add vue-tippy

tippy在vue项目中的引入

在main.js中引入

import VueTippy from 'vue-tippy'
Vue.use(VueTippy)

避免xss

Vue.use(VueTippy,{
arrow:true,
ignoreAttributes:true,
allowHTML:false
})

项目使用

实例——使用el-progress进度条模仿柱状图,tippy模仿echarts悬浮框

使用方法一 ——命令

<el-progress
v-tippy="{
content:`<p>名称:${name}</p><p>数量:${num}个</p>`,
allowHTML:true,
theme:'bar-echarts'
}"
:stroke-width="8"
:percentage="parseInt((num/total)*100)||0"
:show-text="false"
/>

bar-echarts样式

.bar-echarts-theme{
text-align:left;
background:#fff6f4 !important;
border:1px solid #f17764;
color:#f17764;
font-size:13px !important;
transfrom-style:preserve-3d;
(隐藏箭头)
&[x-placement^='top']::before{
content:'';
position:absolute;
width:0;
height:0;
}
&[x-placement^='top'].tippy-arrow{
display:none
}
&[x-placement^='bottom'].tippy-arrow{
border:none;
}
.tippy-roundarrow{
fill:#fef0f0;
svg{
display:none;
}
}
}

使用方法二——组件

首先在组件中引入
import {TippyComponent} from 'vue-tippy'
使用(样式同上)
<tippy-component theme="bar-echarts">
<template #trigger>
<el-progress
:stroke-width="8"
:percentage="parseInt((num/total)*100)||0"
:show-text="false"
/>
</template>
<p>名称:{{name}}</p>
<p>数量:{{num}}个</p>
</tippy-component>

补充:可以通过一些条件限制悬浮框出现条件或者方式,例如下面

v-tippy="{
content:tag,
trigger:tag&&tag.length>10?'mouseenter':'click'
}"
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以通过判断内容是否超出元素宽度来实现,如果超出则使用 `el-tooltip` 显示悬浮,否则不显示。 首先,使用 `ref` 属性给元素设置一个引用,方便后面获取元素的宽度。然后,在 `mounted` 钩子函数中,获取元素的宽度,并将其存储在一个变量中。 接着,在模板中使用 `v-if` 指令判断内容是否超出元素宽度。如果超出,则使用 `el-tooltip` 组件显示悬浮,并将完整内容作为 `content` 属性传递进去。否则,直接显示内容。 下面是一个简单的示例代码: ```vue <template> <div ref="box"> {{ content }} <el-tooltip v-if="isOver" :content="content" placement="top"> <span>{{ content }}</span> </el-tooltip> </div> </template> <script> export default { data() { return { content: '这是一段超出部分将要省略的内容', isOver: false, width: 0, }; }, mounted() { this.width = this.$refs.box.offsetWidth; }, watch: { content() { this.isOver = this.$refs.box.scrollWidth > this.width; }, }, }; </script> <style> div { width: 200px; height: 50px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; } </style> ``` 在上面的示例代码中,`ref` 属性给 `div` 元素设置了一个引用 `box`。在 `mounted` 钩子函数中,使用 `$refs` 获取元素宽度,并将其存储在 `width` 变量中。在 `watch` 中,当 `content` 变化时,判断内容是否超出元素宽度,如果超出则将 `isOver` 设为 `true`,否则设为 `false`。在模板中,使用 `v-if` 判断 `isOver` 是否为 `true`,如果是,则使用 `el-tooltip` 显示悬浮,否则直接显示内容。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿乐今天敲代码没

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值