当前位置:   article > 正文

vue 实现内容超出两行显示展开更多功能,可依据需求自定义任意行数!_vue超过两行显示更多

vue超过两行显示更多

平时开发中我们经常会遇到这样的需求,在一个不限高度的盒子中会有很多内容,如果全部显示用户体验会非常不好,所以可以先折叠起来,当内容达到一定高度时,显示展开更多按钮,点击即可显示全部内容,先来看看效果图:

 这样做用户体验瞬间得到提升,接下来看看具体细节。

  1. <div class="like-box" v-if="likeList.length>0">
  2. <span class="like-triangle"></span>
  3. 主要操作在内容这里
  4. <ul class="like-person" ref="content" :style="{ 'max-height': status ? textHeight : auto }" :class="{ statusText: status }">
  5. <li class="person" v-for="(item,index) in likeList" :key="index" @click="personCenter">
  6. <i class="iconfont icon-dianzan"></i>
  7. <span>{{item.username}}</span>
  8. <span>,</span>
  9. </li>
  10. </ul>
  11. <div @click="moreClick" v-if="isShowMore">
  12. <div class="shenglue">……</div>
  13. <div class="more">展开更多</div>
  14. </div>
  15. </div>

样式大家可依据自己项目需求进行设计,这里就不贴了,主要说几个关键的。

1、在data中定义三个属性

isShowMore: false,  // 控制展开更多的显示与隐藏

textHeight: null,  // 框中内容的高度

status: false,  // 内容状态是否打开

2. 计算内容是否超出两行

获取内容高度时要使用this.$nextTick()保证获取到的高度时DOM渲染完成后的高度

  1. mounted () {
  2. // 计算展开更多内容超出显示
  3. this.$nextTick(() => {
  4. // 这里具体行数可依据需求自定义
  5. let lineHeight = 27 * 2
  6. this.textHeight = `${lineHeight}px`
  7. if (this.$refs.content.offsetHeight > lineHeight) {
  8. this.isShowMore = true
  9. this.status = true
  10. } else {
  11. this.isShowMore = false
  12. this.status = false
  13. }
  14. })
  15. }

3.给内容框绑定动态style和动态class

用status来判断,若为true,添加动态style,设置最大高度为2行内容的高度,相反高度auto,另外添加动态class,让内容为overflow: hidden,主要就是这两个样式在控制。最后给展开更多添加点击事件,隐藏自己。

  1. .statusText {
  2. overflow: hidden;
  3. }

好啦,具体就是这样啦,挺简单的,好像我废话比较多,欢迎各位大佬随时指正! 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/76785
推荐阅读