vue2 自定义 折叠列表(Accordion)组件

1.自定义  折叠列表

Accordion.vue

<!-- 折叠列表 组件 -->
<template>
  <nav :class="$style.accWrapper">
    <div :class="$style.accTitle" @click="toggleList">
      <span>{{ title.area }}</span>
      <span>当前人数:{{ title.num }}人</span>
      <span>总人数:{{ title.sum }}人</span>
      <img
        src="../assets/img/arrow_right.png"
        alt="chevron"
        :class="[{ [$style.open_menu]: isDisplay, [$style.close_menu]: !isDisplay }, $style.accChevron]"
      />
    </div>
    <ul :class="[{ [$style.maxHeight]: isDisplay }, $style.accList]">
      <li :class="$style.accListItem" v-for="item in list">
        <span>{{ item.area }}</span>
        <span>当前人数:{{ item.num }}人</span>
        <span>总人数:{{ item.sum }}人</span>
      </li>
    </ul>
  </nav>
</template>

<script>
  export default {
    data () {
      return {
        isDisplay: false
      }
    },
    props: {
      title: {
        type: Object,
        default(){
          return {}
        }
      },
      list: {
        type: Array,
        required: true
      }
    },
    methods: {
      toggleList () {
        this.isDisplay = !this.isDisplay
      }
    }
  }
</script>

<style lang="scss" module>
  .accWrapper {
    display:flex;
    flex-direction: column;
  }
  .accTitle {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    height: 50px;
    line-height: 50px;
    font-size: 16px;
    background: #eee;
    text-indent: 1em;
    cursor: pointer;
  }
  .accChevron {
    width: 20px;
    margin-right: 15px;
  }
  .accList{
    list-style: none;
    padding: 0;
    margin: 0;
    font-size: 16px;
    overflow: hidden;
    max-height: 0;
    transition: max-height .5s ease-out;
  }
  .accList.maxHeight {
    max-height: 500px;
    transition: max-height .5s ease-in;
  }
  .accListItem {
    background-image: url(../assets/img/arrow_right.png);
    background-repeat: no-repeat;
    background-size: 20px 20px;
    background-position: 95% 50%;
    display: flex;
    // justify-content: space-between;
    align-items: baseline;
    height: 50px;
    line-height: 50px;
    font-size: 16px;
    text-indent: 1em;
    cursor: pointer;
  }
  /* chevron animation  */
  @keyframes open-menu {
    to {
      transform: rotate(90deg);
    }
  }
  @keyframes close-menu {
    from {
      transform: rotate(90deg);
    }
    to {
      transform: rotate(0deg);
    }
  }
  .open_menu {
    animation: open-menu 0.4s ease-out forwards;
  }
  .close_menu {
    animation: close-menu 0.4s ease-out forwards;
  }
</style>

2.页面调用

Fold.vue

<!-- 折叠列表 -->
<template>
  <div>
    <!-- 标题栏 -->
    <mt-header title="折叠列表">
      <router-link to="/" slot="left">
        <mt-button icon="back">返回</mt-button>
      </router-link>
    </mt-header>
    <!-- 列表 -->
    <accordion
      v-for="(item,index) in dataList"
      :key="item.id"
      :title="item"
      :list="item.child">
    </accordion>
  </div>
</template>

<script>
  import Accordion from ‘../components/Accordion‘

  export default {
    name: ‘Fold‘,
    components: {
      Accordion,
    },
    data(){
      return {
        dataList:[
          {"area":"深圳","num":"10","sum":"30","child":[
            {"area":"罗湖","num":"20","sum":"20"},
            {"area":"福田","num":"20","sum":"20"},
            {"area":"南山","num":"20","sum":"20"}
          ]},
          {"area":"广州","num":"10","sum":"30","child":[
            {"area":"白云","num":"20","sum":"20"},
            {"area":"福田","num":"20","sum":"20"},
            {"area":"南山","num":"20","sum":"20"}
          ]}
        ]
      }
    }
  }
</script>

<style lang="scss" scoped>
  //
</style>

3.效果图

时间: 2024-10-10 03:35:09

vue2 自定义 折叠列表(Accordion)组件的相关文章

【转】 HVTableView创建--展开/折叠列表能 AAShareBubbles社会分享动画组

原文: http://blog.csdn.net/billfanggs/article/details/17279969 HVTableView HVTableView是UITableView(带有展开/折叠功能)的子集,可以方便地用在很多app中.开发者可以使用展开/折叠列表而 不用为每个单元格创建一个详细的viewController,从而节省开发时间.这意味着每个单元格的详细信息可以即刻展示在表格中,而不用切换至另外 一个视图才能查看详细信息. 附件: /cms/uploads/soft/

ngx-bootstrap使用02 Accordion组件的使用

1 Accordion组件 该组件通过一个可折叠的控制面板去在有限空间内显示更多的信息 according组件在可折叠指令的最外层,该组件提供了一些列的项目列表去显示被折叠的内容,这些项目列表包含header和body,通过单击这些项目列表的header就可以让body实现关闭和打开效果,从而实现折叠内容的显示和关闭 1.1 基本使用 1.1.1 在模块级别导入AccordionModule import { BrowserModule } from '@angular/platform-bro

ASP.NET列表生成组件DbNetList控件下载及介绍

DbNetList是一个综合功能的列表选择组件,作为动态HTML(DHTML)实现.运用DbNetList,你可以快速为自己的web页面添加数据库驱动的列表.下拉式列表(drop-down).树型和复选框列表.DbNetList兼容最流行的各种数据库服务器,包括:SQL Server.Oracle和Informix. 具体功能: 生成列表.多列列表.下拉式列表(drop-down).树型列表.复选框列表... 提供ASP 和 ASP.NET的本地版本. 基于浏览器.无论何处均可设计和运行.无需客

SuperSwipeRefreshLayout 一个功能强大的自定义下拉刷新组件

SuperSwipeRefreshLayout 一个功能强大的自定义下拉刷新组件. Why? 下拉刷新这种控件,想必大家用的太多了,比如使用很多的XListView等.最近,项目中很多列表都是使用ReyclerView实现的,代替了原有的ListView,原有下拉刷新方式遭到挑战.本来Google推出的SwipeRefreshLayout已经能够满足大部分的需求了.然而,由于其定制性较差,下拉刷新的样式无法修改,而且被嵌套的View也无法跟随手指的滑动而滑动.基于以上考虑,定制自己强大的Supe

自定义数组列表和队列

最近一直在研究数据结构与算法,涉及到自定义数组和队列,感觉对JDK源代码的底层功能实现学习有一定的帮助,故作此总结,以供参考. ps:JDK的源代码更加复杂,我的自定义数组列表和队列只是一些简单的逻辑实现. 1.自定义数组列表(MyArrayList.java) package com.BlueStarWei.arrayList; /** * * show all fields and method,please click "ctrl + o" * * * 开发过程遇到的问题: *

(转载)Android自定义标签列表控件LabelsView解析

Android自定义标签列表控件LabelsView解析 作者 donkingliang 关注 2017.03.15 20:59* 字数 759 阅读 406评论 0喜欢 3 无论是在移动端的App,还是在前端的网页,我们经常会看到下面这种标签的列表效果: 标签列表 标签从左到右摆放,一行显示不下时自动换行.这样的效果用Android源生的控件很不好实现,所以往往需要我们自己去自定义控件.我在开发中就遇到过几次要实现这样的标签列表效果,所以就自己写了个控件,放到我的GitHub,方便以后使用.有

flex的Accordion组件头部文本居中显示

flex的Accordion组件头部文本默认是居左的,可以通过设置headerStyleName属性使之居中,另外还可以设置字体的样式等 1 <?xml version="1.0" encoding="utf-8"?> 2 <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 3 xmlns:s="library://ns.adobe.com/flex/spar

通过将LDAP 语法升级到 OPATH进行Exchange自定义地址列表升级

[摘要] 在 Microsoft Exchange Server 2003 及早期版本中,LDAP 筛选语法用于创建自定义地址列表.全局地址列表 (GAL).电子邮件地址策略和通讯组.在 Exchange Server 2010 和 ExchangeServer 2007 中,OPATH 筛选语法替代了 LDAP 筛选语法.当我们把Exchange 2003升级到了2010之后,需要把地址列表进行升级,否则在2010中无法打开. 一  地址列表升级说明 Exchange 2010 支持 LDAP

cocos2d-js 3.0 rc2 自定义UI控件组件 例子:能播放动画的MenuItem。MenuItemSprite的bug

其实总体自定义UI组件都比较简单,尤其是cocos2d-js是开源的,如果有什么不明白的直接看js代码或者C++代码即可.当然js代码基本就够了. 另外,js的ctor函数虽然说是构造函数,但毕竟不是flash或者c++的构造函数,这只是一个普通函数,也就是说可以不在第一行默认调用,这就给扩展带来了不少方便. 现在想做一个声音按钮,点一下能关闭音乐,再点一下又能打开.当然就是MenuItemToggle了. 但想做得再炫一点,有声音的时候,按钮的样子能有几个音波的变化.那么就需要用MenuIte