vue编写折叠面板组件

vue编写折叠面板组件

  • 创建collapse.vue组件中
  • 利用组件之间传讯 + css样式 实现一个简单的折叠面板
    <ul class="collapse">
      <li class="item" v-for="(item, index) in collList" :key="index">
        <p @click="open(index)">
          <img src="/static/svg/tbm.svg" alt="" />
          <span>{{ item.name }}</span>
        </p>
        <div class="Content" ref="liCol">
            <p>我是测试内容</p>
        </div>
      </li>
    </ul>
  • 接收父组件传递过来的值,监听传递过来值的变化,然后在渲染
    export default {
        components: {},
        props: ["collLists"],
        data() {
            return {
                liColHeight: 0, // 折叠面板内容初始高度
                collList: this.collLists,
            };
        },
        methods: {
            // 项目折叠面板动画效果实现
            open(i) {
                const liCol = this.$refs.liCol[i];
                let height = liCol.offsetHeight; //获取要展开元素的高度
                if (height === this.liColHeight) {
                    // 展开
                    liCol.style.height = "auto";
                    height = liCol.offsetHeight;
                    liCol.style.height = this.liColHeight + "px";

                    let f = document.body.offsetHeight; // 必加
                    liCol.style.height = height + "px";
                } else {
                    // 收缩
                    liCol.style.height = this.liColHeight + "px";
                }
            },
        },
        watch: {
            /* 监听传的值 */
            collLists(newval, oldval) {
                /* 将变化的新值,赋予到要渲染的值 */
                this.collList = newval;
            }
        },
    };

对样式进行调整


    .collapse {
        .item {
            .Content {
                height: 0px;
                overflow: hidden;
                transition: height 0.3s;
            }
        }
    }

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我来为您详细解答。 首先,我们需要定义一个 CollapsePanel.vue 组件,该组件包含两个 slot:title 和 content,用于自定义标题和内容部分。同时,我们需要维护一个状态来控制面板的展开和折叠。 下面是 CollapsePanel.vue 的代码: ```html <template> <div class="collapse-panel-wrapper"> <div class="collapse-panel-header" @click="toggle">{{ title }}</div> <transition name="collapse"> <div class="collapse-panel-content" v-show="isOpen"> <slot name="content"></slot> </div> </transition> </div> </template> <script> export default { name: "CollapsePanel", data() { return { isOpen: false }; }, props: { title: { type: String, default: "" } }, methods: { toggle() { this.isOpen = !this.isOpen; } } }; </script> <style> .collapse-panel-wrapper { border: 1px solid #ccc; border-radius: 4px; margin-bottom: 10px; } .collapse-panel-header { padding: 10px; cursor: pointer; } .collapse-panel-content { padding: 10px; overflow: hidden; } .collapse-enter-active, .collapse-leave-active { transition: height 0.3s ease-out; } .collapse-enter, .collapse-leave-to { height: 0; } </style> ``` 在该组件中,我们使用了 Vue 的过渡效果来实现高度动画的效果。在内容部分的容器 div 中,我们使用 v-show 指令来控制面板的展开和折叠。在点击标题部分的容器 div 时,我们调用 toggle 方法来改变 isOpen 的值,从而控制内容部分的显示和隐藏。 最后,我们可以在需要使用折叠面板的地方,通过引入 CollapsePanel 组件并使用 slot 来自定义标题和内容部分。例如: ```html <template> <div class="container"> <CollapsePanel title="面板1"> <template #content> <div>这是面板1的内容</div> </template> </CollapsePanel> <CollapsePanel title="面板2"> <template #content> <div>这是面板2的内容</div> </template> </CollapsePanel> </div> </template> <script> import CollapsePanel from "@/components/CollapsePanel.vue"; export default { name: "App", components: { CollapsePanel } }; </script> <style> .container { max-width: 400px; margin: 0 auto; } </style> ``` 以上就是使用 Vue2 和 uniapp 编写折叠面板组件。希望能够对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值