列表中每一项实现展开收起功能

提示:前端动态列表中每一项的展开收起功能


前言

提示:列表中每一项都有展开收起:

从后端获取数据,渲染列表,使每一项都有展开收起功能。


一、效果图展示

在这里插入图片描述
在这里插入图片描述

二、详细说明

1.需求分析

我的需求是:只有文字超出三行的时候,才显示展开收起字段;小于三行则不展示;

2.代码分析

代码如下(示例):

<view class="imgBox">
     <view  :class="item.openShow ? 'nameTag2' : 'nameTag3'">{{ item.content }} </view>
     <view v-if="item.openShow && !item.firstLineCount" @click.stop="clickOpen(item)" class="openShow">展开</view>
     <view v-if="!item.openShow && !item.firstLineCount" @click.stop="clickOpen(item)" class="openShow">收起</view>
</view>

........
data() {
    return {
      // 判断展开收起字段
      openShow: false,
    }
  },

methods: {
// 获取动态列表
    getDynamicsList(lastKeyWord) {
      let that = this
      let data = {
        findType: 'SELF',
        pageSize: 10,
        targetNumberId: that.otherUserId,
      }
      requestMethod('/user/v1/list', data).then((res) => {
        if (res.code == 'SUCCESS') {
          //此处做了分页加载数据
          that.dynamicList = [...that.dynamicList, ...res.data.list]
          
          //因为后端接口中每一项没有返回控制展开收起的字段,前端自己遍历添加一个控制字段openShow,
          //已经在data中定义过了
          that.dynamicList.forEach((item, index) => {
            //item.openShow控制展开收起字段的交互;
            item.openShow = item.content.length > 78 ? true : false
            //item.firstLineCount控制是否超出三行,按照一行26个字来控制长度,可能不准确,
            //但想不到如何获取每一项的文字有几行,暂时按照文字长度来判断;
            item.firstLineCount = item.content.length <= 78 ? true : false
            //这个item.id因为接口里面没有返回每一项的id之类的字段,所以为了下面的点击展开收起时,
            //要触发更新文字的变化,所以加了一个id;若是接口里面有类似于id等字段,可以不加
            item.id = index
          })
        }
      })
    },
    
   //要触发更新,不然不会立刻改变展开收起文字的变化
   clickOpen(item) {
      let that = this
      // 触发vue2中的更新
      let arr = [...that.dynamicList]
      arr.forEach((item2, index) => {
        if (item2.id == item.id) {
          item2.openShow = !item2.openShow
        }
      })
      that.dynamicList = arr
    },
}
.imgBox .nameTag2 {
  font-size: 24rpx;
  font-family: OPPOSans, OPPOSans-Medium;
  font-weight: 500;
  color: #333333;
  line-height: 32rpx;
  margin-left: 10rpx;
  
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  word-break: break-all;
}
.imgBox .nameTag3 {
  font-size: 24rpx;
  font-family: OPPOSans, OPPOSans-Medium;
  font-weight: 500;
  color: #333333;
  line-height: 32rpx;
  margin-left: 10rpx;
  word-break: break-all;
}
.openShow {
  font-size: 24rpx;
  font-family: OPPOSans, OPPOSans-Medium;
  font-weight: 500;
  text-align: left;
  color: #ff466d;
  line-height: 32rpx;
  margin-left: 10rpx;
}

以上是所有代码文字。


总结

做列表每一项的展开收起功能,一般后端都不会返回相应的字段,所以基本上都是前端自己定义一个控制变量的字段,因此点击展开收起文字时要触发vue2的更新,否则会触发效果,但是展开收起文字不会发生变化。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值