国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Vue.JS實現垂直方向展開、收縮不定高度模塊的JS組件

2019-11-19 13:38:07
字體:
來源:轉載
供稿:網友

需求分析:

如圖,有很多高度不固定的模塊(圖中只顯示兩個,本人項目有十三個),點擊模塊標題展開相應的模塊,再次點擊此模塊匿藏,如何實現此需求并實現復用? 

 點擊紅框前:

這里寫圖片描述 

 點擊后:

這里寫圖片描述

難點分析:

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

<!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>

這種方法確實可以實現點擊展開,再次點擊收縮的需求,但是有一個明顯的缺點:限定了容器的高度,也就是每個模塊都需要固定高度,并不適用于需求場景。

解決方案:

1、實現一個函數式組件

本人命名為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、引用此組件

這里寫圖片描述 

 在components中注冊了此組件:

這里寫圖片描述

即可在teamplate中引用,請留意紅框文字說明部分。

這里寫圖片描述 

至此,Vue.js實現垂直展開、收縮不定高度模塊組件實現完成及應用均已完成。 

 實現效果:

這里寫圖片描述

總結

以上所述是小編給大家介紹的Vue.JS實現垂直方向展開、收縮不定高度模塊的JS組件,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昔阳县| 大港区| 光泽县| 黄陵县| 丽水市| 汪清县| 苍溪县| 古蔺县| 常州市| 鄂托克前旗| 太仆寺旗| 通道| 荣昌县| 迁西县| 团风县| 定边县| 绍兴县| 梓潼县| 砚山县| 宾阳县| 平度市| 鄂温| 东宁县| 通州区| 彰化县| 翼城县| 贡山| 奉节县| 屯昌县| 齐齐哈尔市| 天台县| 云南省| 东兰县| 竹溪县| 霞浦县| 吴旗县| 临夏县| 临泽县| 永胜县| 池州市| 康定县|