文本溢出处理(显示省略号)之溢出事件监听

1.文本显示溢出处理以及注意事项

在处理前端的文本时候,我们可能需要对多余的文本进行省略显示。

.text-overflow {
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
}

前提保证:当前包裹文本dom元素要是块元素,其次要有固定的宽度。

-webkit-line-clamp  代表文本元素 想要显示的行数

-webkit-box-orient 表示指定子元素的排列方向,注意:这个属性在低版本浏览器编译的时候可能会丢失,推荐写法:

/* autoprefixer: ignore next */
-webkit-box-orient: vertical;

-webkit-line-clamp 是一个 不规范的属性(unsupported WebKit property),它没有出现在 CSS 规范草案中。

为了实现该效果,它需要组合其他外来的WebKit属性。常见结合属性:

  • display: -webkit-box; 必须结合的属性 ,将对象作为弹性伸缩盒子模型显示 。
  • -webkit-box-orient 必须结合的属性 ,设置或检索伸缩盒对象的子元素的排列方式 。
  • text-overflow,可以用来多行文本的情况下,用省略号“...”隐藏超出范围的文本 。

对于单行文本显示省略还是推荐使用:

display: inline-block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;

2.文本溢出事件判断

接到一个需求:文本从接口动态获取后在页面只显示三行,超过三行显示省略号...,并且要显示一个 详情按钮,点击按钮查看所有文本内容。没超过三行不做处理。

初想:通过获取文本域宽度除以文本中文字的宽度去进行长度限制。做到一半发现进入误区,此方法并不能完美限制,而且很麻烦,文本如果又不同字符长度是不一样的。写代码我只要觉得写的很累很麻烦的时候我一定会放弃,代表方式以及思路错了。重新去查资料。

后续思考实践:通过获取文本域的dom节点的 clientHeight  (dom元素的可见高度)和 scrollHeigth (文本实际高度,即可见高度+隐藏高度)进行比较,如果 scrollHeigth大于clientHeight则代表内容超出已经显示...了。

var cHeight = document.getElementsByClassName('text-overflow')[1].clientHeight;
var sHeight = document.getElementsByClassName('text-overflow')[1].scrollHeight;
if (sHeight >cHeight) {
	console.log("已经溢出显示省略号");
} else {
	console.log("没有溢出");
}

到此及完美解决。

后续:如果考虑页面动态变化问题,那就要考虑监听页面变化实时去获取dom的高度变化重新去判断。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值