vue点击收起部分隐藏

[demo](https://chengheai.github.io/daily-vue-demo/#/element)

效果

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

代码

  <div>
    <div v-for="item in showdetailList" :key='item.message'>
      <h3>{{item.message}}</h3>
    </div>
  </div>
  <el-button type="success" v-if="items.length > 2" v-on:click="changeFoldState">
    <span>{{brandFold?'展开':'收起'}}</span>
  </el-button>
data(){
  return {
    brandFold: true,
      items: [{
        message: "Foo"
      }, {
        message: "Bar"
      }, {
        message: "alex"
      }]
  }
},
computed: {
    showetailList: {
      get: function () {
        if (this.brandFold) {
          if (this.items.length < 3) {
            return this.items
          }
          let newArr = []
          for (var i = 0; i < 2; i++) {
            let item = this.items[i]
            newArr.push(item)
          }
          return newArr
        }
        return this.items
      },
      set: function (val) {
        this.showdetailList = val
      }
    }
  },
  methods: {
  	changeFoldState() {
      this.brandFold = !this.brandFold
    }
  }
### 实现 Vue 表单组件的展开与收起效果 为了创建具有展开和收起功能的表单组件,在 Vue 中可以通过结合 `v-if` 或者 `v-show` 来控制元素的可见性,并利用 CSS 的过渡属性来实现平滑的动画效果。 #### 使用 v-show 和 CSS Transition 组合 当使用 `v-show` 指令时,它会根据表达式的真假值切换元素的 `display` 属性。这使得可以在不移除 DOM 节点的情况下隐藏或显示内容。配合 CSS 的 `transition` 可以轻松添加进入和离开的动画效果[^1]。 ```css .fade-enter-active, .fade-leave-active { transition: all 0.3s ease; } .fade-enter-from, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ { opacity: 0; transform: translateY(-20px); } ``` 对于样式方面,可以借鉴 Element UI 提供的设计思路: ```less .contain { width: 100%; height: auto; // 改为自适应高度以便于动态调整大小 overflow: hidden; // 防止子元素溢出容器边界 border: 1px solid #dcdcdc; &.expanded { height: auto !important; } .listStyle { padding-top: 1em; padding-bottom: 1em; transition: max-height 0.5s ease-in-out; max-height: 0; &:not(.hidden) { max-height: 500px; // 设置最大高度防止过度拉伸 } } } ``` 在模板部分,则需要定义一个布尔变量用于跟踪当前状态(即是否已展开),并通过点击事件触发其变化: ```html <div class="contain" :class="{ 'expanded': isExpanded }"> <div @click="toggleExpand()"> <!-- 折叠按钮 --> {{isExpanded ? "收起" : "展开"}} </div> <ul class="listStyle" :class="{ 'hidden': !isExpanded}"> <li v-for="(item,index) in items" :key="index">{{ item }}</li> </ul> </div> ``` 最后是在 JavaScript 方法里处理逻辑: ```javascript export default { data() { return { isExpanded: false, items: ['Item 1', 'Item 2', 'Item 3'] }; }, methods: { toggleExpand(){ this.isExpanded = !this.isExpanded; } } }; ``` 上述代码展示了如何构建一个简单的可扩展列表结构,其中包含了基本的功能需求——能够响应用户的交互行为并执行相应的视觉反馈[^2]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值