通过计算文章内容的高度来确定是否需要显示展开按钮,然后根据用户的点击来展开或收起文章内容。以下是一个简单的实现示例:
<template><div class="article"><div v-if="isContentOverflow" :style="{ maxHeight: contentMaxHeight + 'px' }" ref="content" class="content">{{ articleContent }}</div><button v-if="isContentOverflow" @click="toggleContent" class="toggle-button">{{ showFullContent ? '收起' : '展开' }}</button></div>
</template><script setup lang="ts">
import { ref, computed, onMounted } from 'vue';const articleContent = ref<string>('文章内容,这里是一段很长的文章内容。文章内容,这里是一段很长的文章内容。文章内容,这里是一段很长的文章内容。'
);
const contentMaxHeight = ref<number>(100); // 设置最大高度
const showFullContent = ref<boolean>(false);const isContentOverflow = computed(() => {const contentEl = document.getElementById('content');return contentEl ? contentEl.scrollHeight > contentMaxHeight.value : false;
});const toggleContent = () => {showFullContent.value = !showFullContent.value;
};onMounted(() => {const contentEl = document.getElementById('content');if (contentEl) {contentMaxHeight.value = contentEl.clientHeight;}
});
</script><style scoped>
.article {position: relative;
}
.content {overflow: hidden;transition: max-height 0.3s ease;
}
.toggle-button {position: absolute;bottom: 0;right: 0;
}
</style>
首先通过计算属性isContentOverflow
判断文章内容是否溢出,如果溢出则显示展开按钮。然后根据用户点击来切换showFullContent
的值,以展开或收起文章内容。通过设置contentMaxHeight
,可以调整文章内容的最大高度。