Skip to content

H5预览

APP下载

ReadMore 查看更多

用于内容超出指定高度时,显示“展开/收起”按钮,支持自定义展开/收起文案、图标及禁用状态。常用于长文本、详情介绍等场景,提升页面的简洁性和用户体验。

基础参数

参数说明类型可选值默认值
pt样式透传配置,用于自定义组件内部元素样式PassThrough--
modelValue是否展开boolean-false
height收起状态下的最大高度(px)number-40
expandText展开时显示的文本string-"展开"
collapseText收起时显示的文本string-"收起"
expandIcon展开时显示的图标string-"arrow-down-s-line"
collapseIcon收起时显示的图标string-"arrow-up-s-line"
disabled是否禁用boolean-false

方法

事件名说明回调参数
toggle切换收起/展开(): void

PassThrough

支持深度自定义组件内部元素样式,提供企业级的样式控制能力。

属性名说明类型
className组件根容器的样式类名string
wrapper内容包裹区域的配置PassThroughProps
content展示内容区域的配置PassThroughProps
mask内容底部遮罩的配置PassThroughProps
toggle展开/收起按钮的配置PassThroughProps

示例

基础用法

vue
<template>
	<cl-read-more>
		<cl-text>
			云想衣裳花想容,春风拂槛露华浓。若非群玉山头见,会向瑶台月下逢。
			一枝红艳露凝香,云雨巫山枉断肠。借问汉宫谁得似?可怜飞燕倚新妆。
			名花倾国两相欢,常得君王带笑看。解释春风无限恨,沉香亭北倚阑干。
		</cl-text>
	</cl-read-more>
</template>

控制展开/收起

通过配置 v-model 实现对展开与收起状态的双向绑定

vue
<template>
	<cl-read-more v-model="visible">
		<cl-text>
			云想衣裳花想容,春风拂槛露华浓。若非群玉山头见,会向瑶台月下逢。
			一枝红艳露凝香,云雨巫山枉断肠。借问汉宫谁得似?可怜飞燕倚新妆。
			名花倾国两相欢,常得君王带笑看。解释春风无限恨,沉香亭北倚阑干。
		</cl-text>
	</cl-read-more>
</template>

<script setup lang="ts">
const visible = ref(false);
</script>

禁用切换按钮

通过设置 disabled 属性,可禁用展开/收起按钮

vue
<template>
	<cl-read-more disabled>
		<cl-text>
			云想衣裳花想容,春风拂槛露华浓。若非群玉山头见,会向瑶台月下逢。
			一枝红艳露凝香,云雨巫山枉断肠。借问汉宫谁得似?可怜飞燕倚新妆。
			名花倾国两相欢,常得君王带笑看。解释春风无限恨,沉香亭北倚阑干。
		</cl-text>
	</cl-read-more>
</template>

自定义高度

通过设置 height 参数,满足不同场景下的高度自定义需求

vue
<template>
	<cl-read-more :height="150">
		<cl-text>
			云想衣裳花想容,春风拂槛露华浓。若非群玉山头见,会向瑶台月下逢。
			一枝红艳露凝香,云雨巫山枉断肠。借问汉宫谁得似?可怜飞燕倚新妆。
		</cl-text>

		<cl-image
			:height="150"
			width="100%"
			:pt="{
				className: 'my-3'
			}"
			src="https://uni-docs.cool-js.com/demo/pages/demo/static/bg1.png"
		></cl-image>

		<cl-text> 名花倾国两相欢,常得君王带笑看。解释春风无限恨,沉香亭北倚阑干。 </cl-text>
	</cl-read-more>
</template>

动态高度

内容从接口异步获取时,根据实际渲染高度自动调整展示区域,无需手动设置高度参数。

vue
<template>
	<cl-read-more :content="content" :show-toggle="content != ''" ref="readMoreRef">
		<view class="flex flex-row items-center justify-center h-14" v-if="content == ''">
			<cl-loading></cl-loading>
		</view>
	</cl-read-more>
</template>

<script lang="ts" setup>
const content = ref("");

function getContent() {
	setTimeout(() => {
		content.value =
			"云想衣裳花想容,春风拂槛露华浓。若非群玉山头见,会向瑶台月下逢。一枝红艳露凝香,云雨巫山枉断肠。借问汉宫谁得似?可怜飞燕倚新妆。名花倾国两相欢,常得君王带笑看。解释春风无限恨,沉香亭北倚阑干。";

		// 使用 slot 插入内容时,如果内容发生变化,需要重新获取高度
		// readMoreRef.value!.getContentHeight();
	}, 500);
}
</script>

自定义展开/收起文案、图标

如下示例所示,初始状态下按钮为禁用,支付解锁后即可使用。

vue
<template>
	<cl-read-more
		v-model="visible"
		:disabled="disabled"
		:expand-text="disabled ? '付费解锁' : '展开'"
		:expand-icon="disabled ? 'lock-line' : 'arrow-down-s-line'"
		@toggle="toggle"
	>
		<cl-text>
			云想衣裳花想容,春风拂槛露华浓。若非群玉山头见,会向瑶台月下逢。
			一枝红艳露凝香,云雨巫山枉断肠。借问汉宫谁得似?可怜飞燕倚新妆。
			名花倾国两相欢,常得君王带笑看。解释春风无限恨,沉香亭北倚阑干。
		</cl-text>
	</cl-read-more>
</template>

<script setup lang="ts">
import { ref } from "vue";
import { useUi } from "@/uni_modules/cool-ui";

const ui = useUi();

const visible = ref(false);
const disabled = ref(true);

function toggle(isExpanded: boolean) {
	ui.showConfirm({
		title: "提示",
		message: "需支付100元才能解锁全部内容,是否继续?",
		callback(action) {
			if (action == "confirm") {
				ui.showToast({
					message: "支付成功"
				});

				disabled.value = false;
				visible.value = true;
			}
		}
	});
}
</script>