vue3项目只展示三行文本,超过显示展开全部按钮

代码:

<template>
  <div class="content-wrap">
    <div :class="['content', expande ? 'expande' : 'close']" ref="content">
      {{ summary }}
    </div>
    <div class="expande-button-wrap" v-if="needShowExpande">
      <div class="expande-button" @click="expandeClick" v-if="!expande">
        展开
      </div>
      <div class="expande-button" @click="expandeClick" v-else>收起</div>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      expande: true,
      needShowExpande: false,
      summary:
        "内容内容内容内容内容内容内容内容内容内容内容内容内容内容容内容内容内容内容内容内容内容内容内容内容容内容内容内容内容内容内容内容内容内容内容容内容内容内容内容内容内容内容内容内容内容容内容内容内容内容内容内容内容内容内容内容容内容内容内容内容内容内容内容内容内容内容容内容内容内容内容内容内容内容内容内容内容容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容容内容内容内容内容内容内容内容内容内容内容容内容内容内容内容内容内容内容内容内容内容容内容内容内容内容内容内容内容内容内容内容容内容内容内容内容内容内容内容内容内容内容容内容内容内容内容内容内容内容内容内容内容容内容内容内容内容内容内容内容内容内容内容容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容",
    };
  },
  mounted() {
    this.summaryHeight();
  },
  methods: {
    expandeClick() {
      this.expande = !this.expande;
    },
    summaryHeight() {
      this.$nextTick(() => {
        let lineHeight = 22;
        console.log(this.$refs.content.offsetHeight);
        if (this.$refs.content.offsetHeight > lineHeight * 3) {
          this.expande = false;
          this.needShowExpande = true;
        } else {
          this.expande = true;
        }
      });
    },
  },
};
</script>

<style>
.content {
  font-size: 14px;
  color: black;
  letter-spacing: 0;
  line-height: 22px;
  text-align: justify;
  overflow: hidden;
  /* display: -webkit-box; */
  /* -webkit-line-clamp: 3;
        -webkit-box-orient: vertical; */
  /* text-overflow: ellipsis; */
}

.expande {
  overflow: auto;
  height: auto;
  padding-bottom: 22px;
}

.close {
  word-break: break-all;
  overflow: hidden;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  text-overflow: ellipsis;
  display: -webkit-box;
  /*overflow: hidden;
        height: 66px;
        padding-bottom: 0;*/
}

.expande-button-wrap {
  bottom: 0;
  right: 0;
  height: 22px;
  background: white;
}

.expande-button {
  text-align: right;
  vertical-align: middle;
  color: #5995ef;
  font-size: 14px;
  line-height: 22px;
}
</style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您可以使用 Vue 的计算属性和 CSS 样式来实现这个功能。 1. 首先,您需要将文本内容存储在一个 Vue data 属性中: ```js data() { return { text: '这是一段超过三行文本内容,需要显示展开按钮' } } ``` 2. 接下来,您可以编写一个计算属性来确定文本是否超过三行: ```js computed: { isTextOverflow() { const element = document.createElement('div') element.innerText = this.text element.style.position = 'absolute' element.style.visibility = 'hidden' element.style.height = 'auto' element.style.width = '300px' // 假设文本宽度为 300px document.body.appendChild(element) const isOverflow = element.offsetHeight > 3 * parseFloat(window.getComputedStyle(element).lineHeight) document.body.removeChild(element) return isOverflow } } ``` 此计算属性将创建一个 div 元素,将文本内容插入其中,然后将其添加到页面中以获取其高度。然后,它将检查文本是否超过三行,通过计算元素的高度和行高来实现。最后,它将从页面中删除元素,并返回一个布尔值,指示文本是否超过三行。 3. 最后,您可以使用 v-if 指令根据计算属性的返回值来显示或隐藏展开按钮: ```html <div> <p :class="{ 'text-overflow': isTextOverflow }">{{ text }}</p> <button v-if="isTextOverflow">展开</button> </div> ``` 在此示例中,我们为文本段落添加了一个名为 "text-overflow" 的 CSS 类,以便在文本超过三行时将其截断。我们还使用 v-if 指令来确定是否应显示展开按钮。 最后,您可以使用 CSS 样式来设置文本段落的截断和展开按钮的样式: ```css .text-overflow { overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; } button { background-color: #007bff; color: #fff; border: none; padding: 5px 10px; border-radius: 5px; cursor: pointer; } ``` 这将通过使用 -webkit-box 属性将文本段落截断为三行,并使用省略号来表示文本的截断。展开按钮将具有蓝色背景和白色文本,并具有一些基本的边框半径和内边距。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值