最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue.js實現簡易折疊面板

 更新時間:2021年10月28日 17:08:30   作者:曲小強  
這篇文章主要為大家詳細介紹了JavaScript實現簡易折疊面板,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了vue.js實現簡易折疊面板的具體代碼,供大家參考,具體內容如下

代碼如下:

主文件:app.vue

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <collpase>
      <collpase-item
        :title="item.name"
        :showAnimation="true"
        v-for="(item, i) in chapterList"
        :key="i"
      >
        <div class="list" v-for="(it, index) in item.list" :key="index">
          {{it.name}}
        </div>
      </collpase-item>
    </collpase>
  </div>
</template>

<script>
import Collpase from './components/Collpase.vue';
import CollpaseItem from './components/CollpaseItem.vue'

export default {
  name: 'App',
  data() {
    return {
      chapterList: [
        {
          name: '標題一',
          list: [
            {
              name: '是是是是是是所'
            },
            {
              name: '啊啊啊啊'
            }
          ]
        },
        {
          name: '標題二',
          list: [
            {
              name: '是是是是是是所'
            },
            {
              name: '啊啊啊啊'
            },
            {
              name: '啊啊啊啊'
            }
          ]
        }
      ]
    }
  },
  components: {
    Collpase,
    CollpaseItem,
  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

子組件:

<template>
 <div class="collapse">
  <slot />
 </div>
</template>
<script>
 export default {
  name: 'Collapse',
  props: {
   accordion: {
    type: [Boolean, String],
    default: false
   }
  },
  provide() {
   return {
    collapse: this
   }
  },
  created() {
   this.childrens = []
  },
  methods: {
   onChange() {
    let activeItem = []
    this.childrens.forEach((vm) => {
     if (vm.isOpen) {
      activeItem.push(vm.nameSync)
     }
    })
    this.$emit('change', activeItem)
   }
  }
 }
</script>
<style lang="css" scoped>
 .collapse {
  width: 100%;
  display: flex;
  flex: 1;
  flex-direction: column;
 }
</style>

子組件:

<template>
 <div>
    <div :class="{ 'collapse-disabled': disabled,'collapse-cell--notdisabled': !disabled, 'collapse-cell--open': isOpen,'collapse-cell--hide':!isOpen }" class="collapse-cell">
      <div :class="{ 'collapse-disabled': disabled}" class="collapse-cell__title"  @click="onClick">
        <span class="collapse-cell__title-text">{{ title }}</span>
        <img :class="{ 'active': isOpen, 'active-animation': showAnimation === true }" class="title-arrow" src="https://static-mumway.oss-cn-zhangjiakou.aliyuncs.com/NetworkFrontEnd/wsj/yslbq/btn_dropdown.png"/>
      </div>
      <div :class="{'collapse-cell__content--hide':!isOpen}" class="collapse-cell__content">
        <div :class="{ 'active-animation': showAnimation === true }" class="collapse-cell__wrapper" :style="{'transform':isOpen?'translateY(0)':'translateY(-50%)','-webkit-transform':isOpen?'translateY(0)':'translateY(-50%)'}">
          <slot />
        </div>
      </div>
    </div>
  </div>
</template>

<script>
 export default {
  name: 'UniCollapseItem',
  props: {
   title: {
    // 列表標題
    type: String,
    default: ''
   },
   name: {
    // 唯一標識符
    type: [Number, String],
    default: 0
   },
   disabled: {
    // 是否禁用
    type: Boolean,
    default: false
   },
   showAnimation: {
    // 是否顯示動畫
    type: Boolean,
    default: false
   },
   open: {
    // 是否展開
    type: Boolean,
    default: false
   },
   thumb: {
    // 縮略圖
    type: String,
    default: ''
   }
  },
  data() {
   return {
    isOpen: false
   }
  },
  watch: {
   open(val) {
    this.isOpen = val
   }
  },
  inject: ['collapse'],
  created() {
   this.isOpen = this.open
   this.nameSync = this.name ? this.name : this.collapse.childrens.length
   this.collapse.childrens.push(this)
   if (String(this.collapse.accordion) === 'true') {
    if (this.isOpen) {
     let lastEl = this.collapse.childrens[this.collapse.childrens.length - 2]
     if (lastEl) {
      this.collapse.childrens[this.collapse.childrens.length - 2].isOpen = false
     }
    }
   }
  },
  methods: {
   onClick() {
    if (this.disabled) {
     return
    }
    if (String(this.collapse.accordion) === 'true') {
     this.collapse.childrens.forEach(vm => {
      if (vm === this) {
       return
      }
      vm.isOpen = false
     })
    }
    this.isOpen = !this.isOpen
    this.collapse.onChange && this.collapse.onChange()
    this.$forceUpdate()
   }
  }
 }
</script>

<style lang="css" scoped>
 .collapse-cell {
  flex-direction: column;
  border-color: #f0f0f0;
  border-bottom-width: 1px;
 }
 .collapse-cell--open {
  background-color: #fff;
 }
 .collapse-disabled {
  cursor: not-allowed !important;
 }
 .collapse-cell--hide {
  height: 48px;
 }
 .active-animation {
  transition-property: transform;
  transition-duration: 0.3s;
  transition-timing-function: ease;
 }

 .collapse-cell__title {
  border-bottom: 1px solid #f0f0f0;
  padding: 12px 20px;
  position: relative;
  display: flex;
  width: 100%;
  box-sizing: border-box;
  height: 44px;
  line-height: 44px;
  flex-direction: row;
  justify-content: space-between;
  align-items: center;
  cursor: pointer;
 }
 .collapse-cell__title-img {
  margin-right: 10px;
 }
 .title-arrow {
  width: 22px;
  height: 14px;
 }
 .active {
  transform: rotate(180deg);
 }
 .collapse-cell__title-text {
  flex: 1;
  font-size: 16px;
  margin-right: 16px;
  white-space: nowrap;
  color: #333333;
    font-weight: bold;
  lines: 1;
  overflow: hidden;
  text-overflow: ellipsis;
 }
 .collapse-cell__content {
  overflow-x: hidden;
 }
 .collapse-cell__wrapper {
  display: flex;
  flex-direction: column;
 }
 .collapse-cell__content--hide {
  height: 0px;
  line-height: 0px;
 }
</style>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • vue中如何讓子組件修改父組件數據

    vue中如何讓子組件修改父組件數據

    這篇文章主要介紹了vue中子組件修改父組件數據的相關資料,文中介紹了vue中watch的認識,關于子組件修改父組件屬性認識,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • vue中的模態(tài)對話框組件實現過程

    vue中的模態(tài)對話框組件實現過程

    這篇文章主要介紹了vue中的模態(tài)對話框組件實現過程,通過template定義組件,并添加相應的對話框樣式,需要的朋友可以參考下
    2018-05-05
  • vue3中如何使用ref和reactive定義和修改響應式數據(最新推薦)

    vue3中如何使用ref和reactive定義和修改響應式數據(最新推薦)

    這篇文章主要介紹了vue3中如何使用ref和reactive定義和修改響應式數據,這里就是vue3中setup組合式api中如何定義響應式數據并且修改賦值全部內容,需要的朋友可以參考下
    2022-12-12
  • webpack 3 + Vue2 使用dotenv配置多環(huán)境的步驟

    webpack 3 + Vue2 使用dotenv配置多環(huán)境的步驟

    這篇文章主要介紹了webpack 3 + Vue2 使用dotenv配置多環(huán)境,env文件在配置文件都可以用, vue頁面用的時候需要在 webpack.base.conf.js 重新配置,需要的朋友可以參考下
    2023-11-11
  • 解決vue-router路由攔截造成死循環(huán)問題

    解決vue-router路由攔截造成死循環(huán)問題

    這篇文章主要介紹了解決vue-router路由攔截造成死循環(huán)問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue cli安裝使用less的教程詳解

    vue cli安裝使用less的教程詳解

    這篇文章主要介紹了vue-cli安裝使用less的教程,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • vue項目中swiper輪播active圖片實現居中并放大

    vue項目中swiper輪播active圖片實現居中并放大

    這篇文章主要介紹了vue項目中swiper輪播active圖片實現居中并放大方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Vue動態(tài)引用json數據的兩種方式

    Vue動態(tài)引用json數據的兩種方式

    在 Vue 項目中引用 JSON 文件非常簡單,尤其是當文件內容是一個數組時,本文給大家介紹了Vue動態(tài)引用json數據的兩種方式,并有相關的代碼示例供大家參考,需要的朋友可以參考下
    2025-04-04
  • vue.config.js配置報錯解決辦法(可能是與webpack混淆)

    vue.config.js配置報錯解決辦法(可能是與webpack混淆)

    在Vue.js開發(fā)過程中,vue.config.js文件是用于配置項目的,特別是對于開發(fā)環(huán)境的設置,這篇文章主要給大家介紹了關于vue.config.js配置報錯解決的相關資料,可能是與webpack混淆,需要的朋友可以參考下
    2024-06-06
  • 如何解決element-ui中select下拉框popper超出彈框問題

    如何解決element-ui中select下拉框popper超出彈框問題

    這篇文章主要介紹了如何解決element-ui中select下拉框popper超出彈框問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評論

孙吴县| 安远县| 铜陵市| 五常市| 恩施市| 克东县| 安溪县| 宽甸| 巨鹿县| 桃园县| 修武县| 英德市| 鄂尔多斯市| 武城县| 蒲江县| 昌邑市| 镇安县| 集贤县| 武冈市| 阿合奇县| 吉木萨尔县| 且末县| 张家口市| 吉木乃县| 婺源县| 赤水市| 梁河县| 永昌县| 西华县| 黄陵县| 永康市| 南汇区| 浮山县| 玛多县| 成都市| 潜山县| 兴安盟| 清涧县| 无棣县| 舒兰市| 华亭县|