文字超长展示...并tooltip展示全部内容

文字超长展示…并tooltip展示全部内容

实现功能备忘

vue2中使用iView写组件实现文字超出固定长度展示省略号,鼠标hover上去提示框展示全部内容:

组件

<template>
    <div class="textToolTip" :style="{maxWidth:maxWidth+'px'}">
        <Tooltip transfer :content="content" :theme="theme" :disabled="!showTooltip" :max-width="maxWidth"
            :placement="placement" class="cell-tooltip"  @mouseleave="handleTooltipOut">
            <span ref="content" :class="[className, row > 1 ? 'ellipsis-two-lines' : 'cell-tooltip-content']"
                @mouseenter="handleTooltipIn" :style="{ '-webkit-line-clamp': row }" @click="_onClick">{{
                    content
                }}</span>
        </Tooltip>
    </div>
</template>

<script>
export default {
    name: 'TextTooltip',
    props: {
        content: {
            type:[String, Number],
            default:''
        },
        className: String,
        theme: {
            type: String,
            default: () => {
                return 'dark';
            }
        },
        placement: {
            type: String,
            default: () => {
                return 'bottom';
            }
        },
        maxWidth: {
            type: [String, Number],
            default: () => {
                return 300;
            }
        },
        row: {
            type: [String, Number],
            default: () => {
                return 1;
            }
        }
    },
    data() {
        return {
            showTooltip: false // 是否需要禁止提示
        };
    },
    methods: {
        handleTooltipIn() {
            const $content = this.$refs.content;
            if (this.row > 1) {
                this.showTooltip = $content.scrollHeight > $content.clientHeight || $content.scrollWidth > $content.clientWidth;
            } else {
                this.showTooltip = $content.scrollWidth > $content.offsetWidth;
            }
        },
        handleTooltipOut() {
            this.showTooltip = false;
        },
        _onClick() {
            this.$emit('textClick')
        }
    }
};
</script>
<style lang="less" scoped>
.cell-tooltip {
    width: 100%;
    display: flex;
    align-items: center;
    word-break: normal;
    white-space: normal;

    .cell-tooltip-content {
        display: block;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

    .ellipsis-two-lines {
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        overflow: hidden;
        text-overflow: ellipsis;
    }
}
</style>

组件使用

<TextToolTip :content="item.dataAstCnName" :placement="'top'" :maxWidth="350" @textClick="goDetail(item)"></TextToolTip>

前端开发中,有时候我们需要判断一个元素是否需要换行展示,以便在它旁边显示一个toolTip来提供额外的信息。这通常涉及到对元素尺寸、内容和容器宽度的计算和比较。以下是一个判断元素是否需要换行展示展示toolTip的基本思路: 1. 获取元素的宽度(width)和高度(height)以及它的内容尺寸。 2. 获取元素父容器的宽度。 3. 比较元素的宽度与其父容器的宽度。 4. 如果元素的宽度超过了父容器的宽度,那么元素就需要换行显示。 5. 为了不影响用户界面的美观性,可以在元素旁边显示一个toolTip,当鼠标悬停在元素上时,展示toolTip显示完整的内容。 具体实现可能依赖于所使用的前端框架或原生JavaScript代码。例如,在原生JavaScript中,你可能会监听鼠标的`mouseenter`和`mouseleave`事件,来控制toolTip显示与隐藏。 以下是一个简化的示例代码,演示如何使用原生JavaScript来实现这样的功能: ```javascript document.addEventListener('DOMContentLoaded', function() { var element = document.getElementById('myElement'); var tooltip = document.getElementById('myToolTip'); element.addEventListener('mouseenter', function() { // 计算元素和容器的宽度 var elementWidth = element.offsetWidth; var containerWidth = element.offsetParent.offsetWidth; // 判断是否需要换行 if (elementWidth > containerWidth) { // 显示toolTip tooltip.style.display = 'block'; } }); element.addEventListener('mouseleave', function() { // 隐藏toolTip tooltip.style.display = 'none'; }); }); ``` 在这个示例中,`#myElement`是需要判断换行的元素,`#myToolTip`是需要显示toolTip元素。当鼠标悬停在`#myElement`上,且它超出了其父容器宽度时,`#myToolTip`将显示出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值