欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue.JS實(shí)現(xiàn)垂直方向展開(kāi)、收縮不定高度模塊的JS組件

 更新時(shí)間:2018年06月19日 16:42:56   作者:ECMAScripter  
這篇文章主要介紹了Vue.JS實(shí)現(xiàn)垂直方向展開(kāi)、收縮不定高度模塊的JS組件,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

需求分析:

如圖,有很多高度不固定的模塊(圖中只顯示兩個(gè),本人項(xiàng)目有十三個(gè)),點(diǎn)擊模塊標(biāo)題展開(kāi)相應(yīng)的模塊,再次點(diǎn)擊此模塊匿藏,如何實(shí)現(xiàn)此需求并實(shí)現(xiàn)復(fù)用? 

 點(diǎn)擊紅框前:

這里寫(xiě)圖片描述 

 點(diǎn)擊后:

這里寫(xiě)圖片描述

難點(diǎn)分析:

模塊高度不固定。比如,本人一開(kāi)始想到的方法如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .box{
      height:500px;
      background-color:black; 
       overflow: hidden;            
    }
    .mybox-leave-active,.mybox-enter-active{
      transition: all 1s ease; 
    }
    .mybox-leave-active,.mybox-enter{
      height:0px !important;
    }
    .mybox-leave,.mybox-enter-active{
      height: 500px;
    }
  </style>
</head>
<body>
<div id="box">
  <transition name="mybox">
    <div class="box" v-show="boxshow"></div>
  </transition>
  <button @click="togglebox">按鈕</button>
</div>
</body>
<script src="../bower_components/vue/dist/vue.js"></script>
<script>
  new Vue({
    el:'#box',
    data:{
      boxshow:false
    },
    methods:{

      togglebox:function(){
        this.boxshow = !this.boxshow;
      }
    }   
  });
</script>
</html>

這種方法確實(shí)可以實(shí)現(xiàn)點(diǎn)擊展開(kāi),再次點(diǎn)擊收縮的需求,但是有一個(gè)明顯的缺點(diǎn):限定了容器的高度,也就是每個(gè)模塊都需要固定高度,并不適用于需求場(chǎng)景。

解決方案:

1、實(shí)現(xiàn)一個(gè)函數(shù)式組件

本人命名為vertical-toggle.js
// Created by xiaoqiang on 17/04/2018.
const elTransition = '0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out'
const Transition = {
 'before-enter' (el) {
  el.style.transition = elTransition
  if (!el.dataset) el.dataset = {}
  el.dataset.oldPaddingTop = el.style.paddingTop
  el.dataset.oldPaddingBottom = el.style.paddingBottom
  el.style.height = 0
  el.style.paddingTop = 0
  el.style.paddingBottom = 0
 },
 'enter' (el) {
  el.dataset.oldOverflow = el.style.overflow
  if (el.scrollHeight !== 0) {
   el.style.height = el.scrollHeight + 'px'
   el.style.paddingTop = el.dataset.oldPaddingTop
   el.style.paddingBottom = el.dataset.oldPaddingBottom
  } else {
   el.style.height = ''
   el.style.paddingTop = el.dataset.oldPaddingTop
   el.style.paddingBottom = el.dataset.oldPaddingBottom
  }
  el.style.overflow = 'hidden'
 },
 'after-enter' (el) {
  el.style.transition = ''
  el.style.height = ''
  el.style.overflow = el.dataset.oldOverflow
 },
 'before-leave' (el) {
  if (!el.dataset) el.dataset = {}
  el.dataset.oldPaddingTop = el.style.paddingTop
  el.dataset.oldPaddingBottom = el.style.paddingBottom
  el.dataset.oldOverflow = el.style.overflow
  el.style.height = el.scrollHeight + 'px'
  el.style.overflow = 'hidden'
 },
 'leave' (el) {
  if (el.scrollHeight !== 0) {
   el.style.transition = elTransition
   el.style.height = 0
   el.style.paddingTop = 0
   el.style.paddingBottom = 0
  }
 },
 'after-leave' (el) {
  el.style.transition = ''
  el.style.height = ''
  el.style.overflow = el.dataset.oldOverflow
  el.style.paddingTop = el.dataset.oldPaddingTop
  el.style.paddingBottom = el.dataset.oldPaddingBottom
 }
}
export default {
 name: 'VerticalToggle',
 functional: true,
 render (h, { children }) {
  const data = {
   on: Transition
  }
  return h('transition', data, children)
 }
}

2、引用此組件

這里寫(xiě)圖片描述 

 在components中注冊(cè)了此組件:

這里寫(xiě)圖片描述

即可在teamplate中引用,請(qǐng)留意紅框文字說(shuō)明部分。

這里寫(xiě)圖片描述 

至此,Vue.js實(shí)現(xiàn)垂直展開(kāi)、收縮不定高度模塊組件實(shí)現(xiàn)完成及應(yīng)用均已完成。 

 實(shí)現(xiàn)效果:

這里寫(xiě)圖片描述

總結(jié)

以上所述是小編給大家介紹的Vue.JS實(shí)現(xiàn)垂直方向展開(kāi)、收縮不定高度模塊的JS組件,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論