文本超过指定行数折叠

本文介绍了一个使用Vue编写的组件,用于实现多行文本超过指定行数时隐藏超出部分并显示“...查看全部”。通过CSS和JS结合,利用二分法动态计算截取长度,确保文本在不超出行数限制的情况下正常显示,超过时展示更多选项。文章详细阐述了需求描述、实现原理、代码实现和注意事项,包括监听文本变化、页面布局变动以及减少浏览器回流的影响。

本文发布于我的个人网站:https://wintc.top/article/58,转载请注明。

        多行文本超过指定行数隐藏超出部分并显示“...查看全部”是一个常遇到的需求,网上也有人实现过类似的功能,不过还是想自己写写看,于是就写了一个Vue的组件,本文简单介绍一下实现思路。

        组件可以通过npm安装使用,需要的同学可以尝试一下:

        组件地址:https://github.com/Lushenggang/vue-overflow-ellipsis
        在线体验:https://wintc.top/laboratory/#/ellipsis

一、需求描述

        长度不定的一段文字,最多显示n行(比如3行),不超过n行正常显示;超过n行则在最后一行尾部显示“展开”或“查看全部”之类的按钮,点击按钮则展开显示全部内容,或者跳转到其它页面展示所有内容。

        预期效果如下:

多行文本超过指定行数折叠

 

二、实现原理

        纯CSS很难完美实现这个功能,所以还得借助JS来实现,实现思路大体相似,都是判断内容是否超过指定行数,超过则截取字符串的前x个字符,然后然后和“...查看全部”拼接在一起,这里的x即截取长度,需要动态计算。

        想通过上述方案实现,有几个问题需要解决:

    • 怎样判断文字是否超过指定行数
    • 如何计算字符串截取长度
    • 动态响应,包括响应页面布局变动、字符串变化、指定行数变化等

        下面具体研究一下这些问题。

1. 怎样判断一段文字是否超过指定行数?

        首先解决一个小问题:如何计算指定行数的高度?我首先想到的是使用textarea的rows属性,指定行数,然后计算textarea撑起的高度。另一个方法是将行高的计算值与行数相乘,即得到指定行数的高度,这个办法我没尝试过,但是想必可行。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值