vue提取elementUI展开收缩动画

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)
    }
}

页面中的使用

import VerticalToggle from '@/assets/js/animation/verticalToggle.js'
Vue.component(VerticalToggle.name, VerticalToggle)

<template>
    <vertical-toggle>
        <div v-if="show">显示,隐藏</div>
    </vertical-toggle>
</template>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 有一段时间没用vue动画了,就忘了,又仔细去看了vue官网 的过渡&动画,记录下来方便快速使用 (可以多看vue官...
    xilong阅读 27,872评论 7 15
  • 以前没有写文章的习惯,现在慢慢开始学着用博客记录点滴,一是方便自己查找,而是和朋友交流分享,今天贴出一个很久以前的...
    MooneyWang阅读 2,394评论 1 3
  • 在最近的项目开发,为了更好的用户体验,项目决定使用一些cell默认展开一条,并具有点击展开和收缩的功能。经过查看资...
    追梦少年22阅读 3,567评论 0 1
  • 点击组头 展开cell 初始化和加载数据 自定义表尾 因为项目需求点击创建分类(创建组头) 自定义cell 自定义...
    来敲代码阅读 4,170评论 0 1
  • 江苏天地合房地产营销策划有限公司 市场拓展招聘5人 职责描述: 1、协助搜集并整理基础信息、夯实基础信息数据库 1...
    France_彩绘阅读 891评论 0 0

友情链接更多精彩内容