视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
2020-11-27 21:58:03 责编:小采
文档


在进行H5页面开发时,项目都要提测了,产品却加了个点击展开和点击收起的需求。 上知乎看了下 ,也有人有这样的疑问,今天我就把问题给解决啦~

这里就来讲述下我的解决方案:

利用多行溢出实现“展开”“收起”

多行溢出省略Css:

 overflow: hidden;
 text-overflow: ellipsis;
 display: -webkit-box;
 -webkit-line-clamp: 2;
 -webkit-box-orient: vertical;

设计是这样的。

点击展开.png

点击收起.png

接下来我来讲讲我的实现

<div class="review">
 孙燕姿导师评语:这位同学唱功基础扎实,转音和高低音的切换非常自然,整首歌曲感情饱满,非常不错。整首歌曲感情饱满,非常不错。整首歌曲感情饱满,非常不错。
</div>
<style>
.review{
 padding-top: .2rem;
 padding-bottom: .1rem;
 margin-left: .9rem;
 font-size: .32rem;
 color:#b85423;
 line-height: 1.5em;
 position: relative;
}
.ellipsis{
 overflow : hidden;
 text-overflow: ellipsis;
 display: -webkit-box;
 -webkit-line-clamp: 2;
 -webkit-box-orient: vertical;
}
.spread{
 padding-right: .2rem;
 position: absolute;
 bottom: .09rem;
 right:0;

}
.spread i{
 width: .2266rem;
 height:.2266rem;
 display: inline-block;
 vertical-align: middle;
 background-image: url(/cdn_img/plusSprite.png);
 background-repeat: no-repeat;
 background-size: .2266rem .72rem;
}
.spread i.plus{
 background-position: 0 0;
}
.spread i.reduce{
 background-position: 0 -0.4933rem;
}
</style>

$('.teacher-review').forEach(function(v,i){
 // 引入flexible.js 进行移动端适配 
 // 根据flexible 获取rem 即 window.rem
 if(v.clientHeight > (1.27*window.rem)){
 var el = document.createElement('span');
 el.innerHTML = '... <i class="plus"></i>点击展开';
 el.className = 'spread';
 // 由于每条评论相间背景
 el.style.backgroundColor = i%2 == 0 ? '#ffca48' : '#ffd358';
 v.appendChild(el);
 // multi 是显示溢出的标志
 $(v).addClass('ellipsis multi') 
 }
})
// 点击判断收起还是展开
$('.review').on('click','.multi',function(e){
 var $this = $(this)
 if($this.hasClass('ellipsis')){
 $this.removeClass('ellipsis').find('span').html('<i class="reduce"></i>点击收起');
 }else{
 $this.addClass('ellipsis').find('span').html('... <i class="plus"></i>点击展开');
 }
})

结果是这样的。。

这里讲解下展开收起的思路:

出现展开的情况是因为内容溢出,那内容没溢出就不需要显示“点击展开的按钮啦”,好心烦,突然接到需求,都没心情热饭吃。

热饭过程中灵感一闪,有了!判断下内容的高度,只要大于指定的高度就能解决溢出显示“点击展开”,不溢出就不显示。

这里的multi class 是为了区分内容溢出还是没溢出~~~~

如果内容显示溢出就加个ellipsis class,一旦点击,判断存在ellipsis class 说明内容溢出啦 ,这时候移除ellipsis class 就展开内容了 是不是很简单。 剩下的就不说了,大家应该都明白了~~

下载本文
显示全文
专题