uni-app当内容过多默认最多显示3行,并显示折叠按钮问题

发布于 1周前 作者 yuanlaile 来自 Uni-App

uni-app当内容过多默认最多显示3行,并显示折叠按钮问题

图片中的搜索历史

image

当内容过多默认最多显示3行,并显示折叠按钮问题:若第三行最后一个item刚好显示到最右侧,此时添加折叠按钮第三行显示不下会自动在第四行显示按钮,但要求此种情况下自动隐藏第三行的最后一个item,让折叠按钮在第三行显示,如何实现此效果?

1 回复

在处理 uni-app 中内容过多需要默认显示最多3行并显示折叠按钮的需求时,你可以通过结合 CSS 和 JavaScript 来实现这一功能。以下是一个简单的示例代码,展示了如何实现这一需求。

首先,假设你的页面结构如下:

<template>
  <view class="container">
    <view class="content" ref="content" :style="{ maxHeight: isFolded ? '66px' : 'none' }">
      <!-- 这里放置你的长内容 -->
      <text>{{ longText }}</text>
    </view>
    <view class="fold-button" @click="toggleFold">
      {{ isFolded ? '展开' : '折叠' }}
    </view>
  </view>
</template>

在上面的代码中,我们使用了 ref 来引用内容区域,并通过 :style 绑定来控制内容区域的最大高度。初始时,我们假设每行文字的高度大约为 22px(这可能会因字体大小等因素而有所不同,你可以根据实际情况调整),因此3行文字的高度约为 66px

接下来是脚本部分:

<script>
export default {
  data() {
    return {
      isFolded: true, // 初始状态为折叠
      longText: '这是一段非常长的文本内容,用于演示内容过多时的折叠和展开功能。...'
    };
  },
  methods: {
    toggleFold() {
      this.isFolded = !this.isFolded;
      // 如果展开,则不设置最大高度,否则设置为3行的高度
      this.$refs.content.style.maxHeight = this.isFolded ? '66px' : 'none';
    }
  },
  mounted() {
    // 在组件挂载后,根据内容高度动态设置初始状态
    const contentHeight = this.$refs.content.scrollHeight;
    if (contentHeight > 66) {
      this.isFolded = true;
    } else {
      this.isFolded = false;
      this.$refs.content.style.maxHeight = 'none'; // 如果没有折叠必要,则直接展开
    }
  }
};
</script>

mounted 钩子中,我们根据内容区域的实际高度来动态设置初始的折叠状态。如果内容高度超过3行的高度(即 66px),则初始状态为折叠;否则,直接展开。

最后是样式部分:

<style scoped>
.container {
  width: 100%;
  overflow: hidden;
}
.content {
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  transition: max-height 0.3s ease;
}
.fold-button {
  margin-top: 10px;
  text-align: center;
}
</style>

以上代码通过结合 CSS 的 -webkit-line-clamp 属性和 JavaScript 的动态样式绑定,实现了在 uni-app 中内容过多时的默认显示3行并显示折叠按钮的功能。

回到顶部