js根据文本是否溢出,判断是否显示el-tooltip、title

// customTooltip 组件

<template>
    <div @mouseenter="handleMouseenter" @mouseleave="mouseleave">
        <el-tooltip placement="top" :disabled="disabled" :content="props.content">
            <slot></slot>
        </el-tooltip>
    </div>
</template>

<script setup>
import { ref } from 'vue';

const props = defineProps({
    content: {
        type: String,
        default: ''
    }
})

const disabled = ref(true)

const handleMouseenter = (e) => {
    if(!props.content) {
        return
    }
    const cellChild = e.target.children[0]
    // range 表示文档的一个区域
    const range = document.createRange()
    range.setStart(cellChild, 0)
    range.setEnd(cellChild, cellChild.childNodes.length)

    const flag = getStyle(cellChild, '-webkit-line-clamp')
    if (flag == 'none') {
        // rangeWidth 表示元素内容的宽度
        const rangeWidth = range.getBoundingClientRect().width
        let padding = (parseInt(getStyle(cellChild, 'paddingLeft')) || 0) + (parseInt(getStyle(cellChild, 'paddingRight')) || 0)

        // cellChild.offsetWidth 表示选定区域的宽度
        if (rangeWidth > cellChild.offsetWidth - padding) {
            // 显示tooltip
            disabled.value = false
        }
    } else {
        // rangeHeight 表示元素内容的高度
        const rangeHeight = range.getBoundingClientRect().height
        let padding = (parseInt(getStyle(cellChild, 'paddingTop')) || 0) + (parseInt(getStyle(cellChild, 'paddingBottom')) || 0)

        // cellChild.offsetHeight 表示选定区域的高度
        if (rangeHeight > cellChild.offsetHeight - padding) {
            // 显示tooltip
            disabled.value = false
        }
    }
}

const mouseleave = () => {
    disabled.value = true;
}

// 获取dom的样式
const getStyle = (dom, attr) => {
    return getComputedStyle(dom, null)[attr]
}   
</script>
// 使用 customTooltip 组件

<CustomTooltip :content="formData[item.key] || ''">
    <p class="text">{{ formData[item.key] || '- -' }}</p>
</CustomTooltip>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值