vue3自适应高度超出折叠功能

1. 需求

常有场景说看到内容如果出现多余一行或几行就出现折叠按钮,没有多就不用折现折叠按钮,点击折叠按钮可以展开或收起折叠内容。

2. 代码

<div class="tgd-box-cont1">
	<div 
          :class="['tgd-box-cont1-left', isExpanded ? 'tgd-height-auto' : '']"
          ref="leftContent"
	>
		...需要折叠的内容
	</div>
	<div class="tgd-box-cont1-right">
          <el-button
            v-if="showToggle"
            @click="toggleExpand"
            size="mini"
            type=""
            class="tgd-box-btn1"
            link
          >
            <span>{{ !isExpanded ? '展开' : '收起' }}</span>
            <el-icon>
              <CaretBottom v-if="!isExpanded" />
              <CaretTop v-else />
            </el-icon>
		</el-button>
	</div>
</div>
<script setup lang="ts">
import { ref, reactive, computed, onMounted, onUnmounted, nextTick } from 'vue'

const leftContent = ref(null)
const isExpanded = ref(false)
const showToggle = ref(false)

function checkOverflow() {
  nextTick(() => {
    if (leftContent.value.scrollHeight > leftContent.value.clientHeight) {
      showToggle.value = true
    }
  })
}

function toggleExpand() {
  isExpanded.value = !isExpanded.value
}

// 当组件挂载后添加resize事件监听器
onMounted(() => {
  window.addEventListener('resize', handleResize)

  checkOverflow()
})

// 当组件卸载前移除resize事件监听器,防止内存泄漏
onUnmounted(() => {
  window.removeEventListener('resize', handleResize)
})
</script>

<style lang="less" scoped>
.tgd-box-cont1 {
  padding-top: 16px;
  display: flex;
  align-items: stretch;
  justify-content: space-between;
}
.tgd-box-cont1-left {
  flex: 1;

  overflow: hidden;
  transition-duration: 0.5s;
  height: 73px;
}
.tgd-height-auto {
  height: auto;
}
.tgd-box-cont1-right {
  flex-basis: 119px;
  flex-shrink: 0;
  padding-top: 23px;
  text-align: right;

  .tgd-box-btn1 {
    padding: 0;
    font-size: 12px;
    width: auto;
    min-width: auto;
    & > span {
      margin-right: 8px;
    }
  }
}
</style>

3. 效果

在这里插入图片描述

求关注
在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值