zoukankan      html  css  js  c++  java
  • Vue 实现展开折叠效果

    Vue 实现展开折叠效果

    效果参见:https://segmentfault.com/q/1010000011359250/a-1020000011360185

    上述链接中,大佬给除了解决方法,再次进行总结,方便以后使用。

    除了使用jQuery的方式实现上述效果,同样可以在Vue实现,下面是解决办法:

    1、创建collapse.js文件

    
    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: "collapseTransition",
      functional: true,
      render(h, { children }) {
        const data = {
          on: Transition
        };
        return h("transition", data, children);
      }
    };
    

    2、在.vue组件中引入

    
    
    <template>
        <div class="container">
            <button @click="isActive = !isActive">展开/折叠</button>
            <collapse>
                <div class="container" v-show="isActive">
                    <h2>欢迎大家品尝Pizza!</h2>
                    <h5>这里有你非常喜欢的Pizza!</h5>
                </div>
            </collapse>
        </div>
    </template>
    <script>
    import collapse from "../assets/js/collapse.js";
    export default {
      data() {
        return {
          isActive: false
        };
      },
      components: {
        collapse
      }
    };
    </script>
    

    来源:https://segmentfault.com/a/1190000016160493

  • 相关阅读:
    cmd中删除、添加、修改注册表命令
    修改注册表使win server 2012R2开机进入桌面而不是开始界面
    win8.1/2012R2上面安装flash debugger
    ANT中的copy和move标签
    用maven在MANIFEST.MF文件中的Class-Path中增加当前目录(.)
    通过ANT生成MANIFEST.MF中的Class-Path属性
    Junit4进行参数化测试
    DbUnit入门实战
    oracle查看当前正在使用的数据库
    左偏树 P3377【模板】左偏树(可并堆)
  • 原文地址:https://www.cnblogs.com/lovellll/p/10145275.html
Copyright © 2011-2022 走看看