• 技术文章 >web前端 >js教程

    关于Vue.JS实现垂直方向展开和收缩不定高度模块的JS组件的方法

    不言不言2018-06-19 17:11:34原创1256
    这篇文章主要介绍了Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    需求分析:

    如图,有很多高度不固定的模块(图中只显示两个,本人项目有十三个),点击模块标题展开相应的模块,再次点击此模块匿藏,如何实现此需求并实现复用?

    点击红框前:

    这里写图片描述

    大前端零基础入门到就业:进入学习

    点击后:

    这里写图片描述

    难点分析:

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

    <!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>
    <p id="box">
      <transition name="mybox">
        <p class="box" v-show="boxshow"></p>
      </transition>
      <button @click="togglebox">按钮</button>
    </p>
    </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实现垂直展开、收缩不定高度模块组件实现完成及应用均已完成。

    实现效果:

    这里写图片描述

    以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

    相关推荐:

    JavaScript如何对图片进行黑白化_javascript技巧

    vue单个组件实现无限层级多选菜单功能

    以上就是关于Vue.JS实现垂直方向展开和收缩不定高度模块的JS组件的方法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    上一篇:解决输入框被输入法遮挡的问题 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 一文详解多版本node的安装和管理• Angular学习之聊聊Http ( 错误处理 / 请求拦截 )• 浅析Angular中的Change Detection机制• 一文聊聊node中的path模块• 浅析Angular变更检测中的订阅异步事件
    1/1

    PHP中文网