列表中,js控制内容超出三行显示省略号并支持展开

文章讲述了在项目中如何使用JavaScript和CSS解决列表循环中超出三行内容的展示问题,通过获取元素高度并判断是否超出三行,实现文本的省略号处理和下拉箭头显示。同时提到一个小插曲,即在开发过程中由于浏览器F12工具影响了body宽度,导致判断不准确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

提示:这里描述项目中遇到的问题:

列表循环展示信息,超出三行需要显示省略号,并支持展开收起。



原因分析:

循环数组获取信息,创建span元素,再模拟真实文字的css情况,利用getBoundingClientRect()获取元素高度,判断与三行文字高度的大小,小于正常显示,大于就动态添加class实现超出显示省略号,并且显示下拉箭头

//循环列表数组 获取信息
arr.forEach((item) => {
    //创建span元素
    const dom = document.createElement('span');
    //模拟显示情况
    dom.style.display = 'inline-block';
    dom.style.lineHeight = '22px';
    dom.style.width = '632px';
    dom.style.fontSize = '14px';
    //需要添加break-word 不然纯数字 英文不会换行
    dom.style.wordBreak = 'break-word'
    //将文字 添加到span中
    dom.textContent = item.content;
    //将span添加到body中(会有点小坑)
    document.body.appendChild(dom);
    // js获取span高度
    const height = dom.getBoundingClientRect().height;
    dom.remove();
    //大于三排时
    if (height > 66) {//行高22  3行就是66
       this.$set(item, 'show', true);
       this.$set(item, 'showArrow', true);
    }
});

小坑:

刚开始我还没有设置span宽度,准备获取了宽度再和三倍真实宽度对比,一般开发过程中都打开了F12,我一般放右侧,导致body宽度被压缩,span添加到body后,自动换行了,导致判断怎么都不出现省略号, dom.remove()了,无法查找bug。

正常使用不会出现问题,后面还是设置了宽模拟了真的dom的情况,js获取高度去判断的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值