首页 > 其他分享 >vue组件-文本超出显示点点点且悬浮可查看所有内容

vue组件-文本超出显示点点点且悬浮可查看所有内容

时间:2022-11-23 18:02:35浏览次数:34  
标签:vue 悬浮 text idEle 组件 overflow true

需求

当文本超出的时候需要显示点点点,然后鼠标悬浮其上要能查看所有的文本内容。就直接封装一个通用的组件。

依赖项

  • element-plus
  • vue3

组件存放目录

新建vue文件/components/overflow-tooltip/OverflowTooltip.vue

组件代码

<template>
  <el-tooltip v-if="isShowTip" effect="light" :content="text">
    <div class="overflow-tooltip-text" :style="{ width: width, display: display }">{{ text }}</div>
  </el-tooltip>
  <div v-else :id="id" class="overflow-tooltip-text" :style="{ width: width, display: display }">{{ text }}</div>
</template>
<script setup lang="ts">
import { ref, watch, nextTick } from 'vue'

const props = defineProps({
  text: {
    type: String,
    required: true
  },
  width: {
    type: String,
    required: true
  },
  id: {
    type: String,
    required: true,
    default: () => 'ot' + Math.floor(Math.random() * 100000000)
  },
  display: {
    type: String,
    required: true,
    default: 'inline-block'
  }
})

const isShowTip = ref(false)

watch(
  () => props.text,
  async function () {
    await nextTick()
    const idEle = document.getElementById(props.id)
    if (!idEle) return
    let style = window.getComputedStyle(idEle, null)
    let paddingL = parseFloat(style.getPropertyValue('padding-left')) //获取左侧内边距
    let paddingR = parseFloat(style.getPropertyValue('padding-right')) //获取右侧内边距
    //超出则可鼠标悬浮查看全部内容
    isShowTip.value = idEle.scrollWidth > idEle.clientWidth - paddingL - paddingR
  },
  { immediate: true }
)
</script>
<style scoped>
.overflow-tooltip-text {
  text-overflow: ellipsis;
  overflow: hidden;
  white-space: nowrap;
}
</style>

组件使用

<template>
  <!-- 会显示点点点 -->
  <OverflowTooltip width="50px" text="999999999999999999999999" />

  <br />

  <!-- 不会显示点点点 -->
  <OverflowTooltip width="50px" text="123" />
</template>

<script setup lang="ts">
import OverflowTooltip from '@/components/overflow-tooltip/OverflowTooltip.vue'
</script>

标签:vue,悬浮,text,idEle,组件,overflow,true
From: https://www.cnblogs.com/cluyun/p/16919276.html

相关文章

  • Vue 初识
    官方地址地址:https://cn.vuejs.org/安装Vue库地址:https://v2.cn.vuejs.org/v2/guide/installation.html 安装浏览器调试工具 另外一种方式安装Vue-devtools......
  • vue2源码学习1
    1.vue源码解读流程newVue调用的是Vue.prototype._init从该函数开始经过$options参数合并之后initLifecycle初始化生命周期标志初始化事件,初始化渲染函数。......
  • java web开发(和vue联合开发)
        前面我们谈到了很多次vue,也说到了vue的很多优点。比如说,vue实现了mvc中全部v的功能,也就是view的部分。这样,后端开发就变得很简单,前后端之间只要实现json数据的......
  • element ui框架(vuex3使用)
        前面我们使用了sessionStorage实现了登陆状态的保存。但是sessionStorage保存的数据是有限的,如果希望实现vue不同组件之间的数据共享,可以使用vuex来实现。目前......
  • element ui框架(vuex模块化)
        上一节我们说到了vuex在数据保存中的作用。其实vuex在实际使用中,需要保存非常多的数据,不可能所有的数据都放到index.js里面。因此,有必要把数据放到单独的模块里......
  • 前端-Avue属性解释
    Avue属性<template><!--基础组件--><basic-container><!--<el-button@click='exportHandle'>导出</el-button>--><avue-crud设置表格属性......
  • Vue项目网页报错Cannot read property ‘components‘ of undefined
    Vue项目网页报错Cannotreadproperty‘components‘ofundefined   记录一下项目中出现的这个报错,这个报错的原因是在App.vue中导入的组件中重复引用了同一个文......
  • vue脚手架安装及依赖
    一、安装VueCil(脚手架)需要先安装node.js,这是node官网地址:https://nodejs.org/en/download/,node有两种版本一种是稳定版一种开发版安装完成输入node-v查......
  • jest快照测试demo(vue)
    1.vuecreatexx  2.选择jest.3.执行npmruntest:unit 结果:     4.快照测试:import{shallowMount}from'@vue/test-utils'importHelloWorld......
  • vue 状态类展示使用红绿圆点
    vue状态类展示使用红绿圆点通常对于一些在线、离线类的展示使用图标展示比使用文字描述会更加清晰直观。项目中使用的代码如下:HTML<el-table-columnprop="status"lab......