uniapp 文本展开/收起

效果图:

再看vue代码:

<template>
    <view class="">
        <view>
            <view class="express">
                <view class="info">
                    <view :class="{hide:!iSinfo}">{{content}}</view>
                    <view class="tips" @click="showinfo" v-if="!iSinfo">
                        <u-icon name="arrow-down" :size="24+'rpx'" color="#0078FF" label="展开" labelPos="left" labelColor="#0078FF"
                            :labelSize="28+'rpx'"></u-icon>
                    </view>
                </view>
                <view class="tips hidebtn" @click="showinfo" v-if="iSinfo">
                    <u-icon name="arrow-up" :size="24+'rpx'" color="#0078FF" label="收起" labelPos="left" labelColor="#0078FF"
                        :labelSize="28+'rpx'"></u-icon>
                </view>
            </view>
        </view>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                iSinfo: false,
                content: `享受了工作带来的薪酬与成长,就要接纳工作带来的辛苦与忙碌,每一刻疲劳的瞬间,我想的都是好好赚钱好好生活。`
            }
        },
        methods: {
            // 全文展开收起
            showinfo() {
                this.iSinfo = !this.iSinfo
            }
        }
    }
</script>

<style lang="scss" scoped>
    // 展开收起
    .express {
        display: flex;
        // width: 100%;
        flex-direction: column;
        background-color: #fff;
        padding: 30rpx;

        position: relative;

        .info {
            display: flex;
            flex-direction: column;

            .tips {
                width: 150rpx;
                height: 40rpx;
                display: flex;
                justify-content: flex-end;
                align-items: center;
                background: linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 50%);

                position: absolute;
                bottom: 30rpx;
                right: 30rpx;
                font-size: 28rpx !important;
            }
        }

    }

    // 收起 按钮
    .hidebtn {
        display: flex;
        flex: 1;
        justify-content: flex-end;
        color: #0078FF;
        font-size: 28rpx;
    }

    // 展开 文字
    .hide {
        word-break: break-word; //换行模式
        overflow: hidden;
        text-overflow: ellipsis; //修剪文字,超过2行显示省略号
        display: -webkit-box;
        -webkit-line-clamp: 2; //此处为上限行数
        -webkit-box-orient: vertical;
    }
</style>

### 实现 UniApp 文本展开收起UniApp 中实现文本展开收起效果可以通过多种方式达成。一种常见的方式是通过 CSS 控制显示的高度并配合 JavaScript 来切换状态。 #### 使用 Vue 的 `v-if` 和 `v-show` 可以利用 Vue 提供的状态管理来控制文本是否完全展示: ```html <template> <view class="text-container"> <text v-if="isExpanded">{{ longText }}</text> <text v-else>{{ shortText }}</text> <button @click="toggleExpand"> {{ isExpanded ? '收起' : '展开' }} </button> </view> </template> <script> export default { data() { return { isExpanded: false, longText: "一段比较长的文字", shortText: "点这试试一段比较短的文字" }; }, methods: { toggleExpand() { this.isExpanded = !this.isExpanded; } } }; </script> ``` 这种方式简单明了,适合用于简单的场景[^1]。 #### 动态调整样式以适应不同设备 对于更复杂的布局需求,可能需要动态计算内容区域的实际尺寸,并据此设置容器的最大高度属性。此过程涉及到了解 DOM 元素的具体几何信息: ```javascript // 在获取数据之后立即执行 this.$nextTick(() => { const query = uni.createSelectorQuery(); query.select('.content').boundingClientRect((rect) => { if (rect) { console.log(`元素高度为:${rect.height}`); // 可在此处根据 rect.height 设置最大高度或其他逻辑处理 } }).exec(); }); ``` 这段代码展示了如何查询特定节点的信息,在实际应用中可以根据这些信息进一步优化用户体验[^3]。 #### 多行文字环绕效果 针对多行文本的特殊格式化需求,比如希望点击按钮后不仅改变可见范围还保持良好的视觉连续性,则需考虑采用专门设计过的 CSS 解决方案。不过需要注意的是某些手机型号可能存在兼容性问题,因此建议充分测试后再决定最终实施方案[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值