Transition 过渡动画

给子元素添加动画效果

代码演示

基础用法

将元素包裹在 transition 组件内,在元素展示/隐藏时,会有相应的过渡动画。

<hd-button type="primary" @click="open">fade</hd-button>
<hd-transition :show="show" custom-class="block">你好</hd-transition>
export default {
  data() {
    return {
      show: false
    }
  },
  methods: {
    open() {
      this.show = true
      setTimeout(() => {
        this.show = false
      }, 500)
    }
  }
}

过渡动画类型

transition 组件内置了多种动画,可以通过name字段指定过渡动画类型。

<button type="primary" @click="open">过渡动画</button>
<hd-transition :show="show" :name="name"></hd-transition>
export default {
  data() {
    return {
      show: false,
      name: 'fade'
    }
  },
  methods: {
    open() {
      this.show = true
      setTimeout(() => {
        this.show = false
      }, 500)
    }
  }
}

动画类型

名称说明
fade淡入
fade-up上滑淡入
fade-down下滑淡入
fade-left左滑淡入
fade-right右滑淡入
slide-up上滑进入
slide-down下滑进入
slide-left左滑进入
slide-right右滑进入
zoom-in由小到大
zoom-out由大到小

过渡动画持续时间

通过duration设置过渡动画持续时间,单位毫秒,默认动画持续时间为 300 毫秒。

<hd-button type="primary" @click="open">过渡动画</hd-button>
<hd-transition :show="show" :duration="duration"></hd-transition>
export default {
  data() {
    return {
      show: false,
      duration: { enter: 300, leave: 1000 }
    }
  },
  methods: {
    open() {
      this.show = !this.show
    }
  }
}

自定义样式和自定义类名

组件可以通过custom-style属性设置自定义样式;也可以通过custom-class属性设置自定义类名。

<button type="primary" @click="open">过渡动画</button>
<hd-transition :show="show" :custom-style="styles" custom-class="custom-class"></hd-transition>
export default {
  data() {
    return {
      showTrans: false,
      styles: 'position: fixed; bottom: 0;top: 0;left: 0;right: 0;backgroundColor: rgba(0, 0, 0, 0.4);'
    }
  },
  methods: {
    open() {
      this.show = !this.show
    }
  }
}

高级用法

可以通过外部样式类自定义过渡效果。

<hd-button type="primary" @click="open">过渡动画</hd-button>
<hd-transition
  :show="show"
  name=" "
  :duration="{ enter: 300, leave: 1000 }"
  custom-class="custom-class"
  enter-class="custom-enter-class"
  enter-active-class="custom-enter-active-class"
  leave-active-class="custom-leave-active-class"
  leave-to-class="custom-leave-to-class"
  @before-enter="onBeforeEnter"
  @enter="onEnter"
  @after-enter="onAfterEnter"
  @before-leave="onBeforeLeave"
  @leave="onLeave"
  @after-leave="onAfterLeave"
/>
export default {
  data() {
    return {
      show: false
    }
  },
  methods: {
    open() {
      this.show = !this.show
    },
    onBeforeEnter() {
      console.log('before enter')
    },
    onEnter() {
      console.log('enter')
    },
    onAfterEnter() {
      console.log('after enter')
    },
    onBeforeLeave() {
      console.log('before leave')
    },
    onLeave() {
      console.log('leave')
    },
    onAfterLeave() {
      console.log('after leave')
    }
  }
}
.custom-class {
  position: fixed;
  z-index: 999;
  top: 50%;
  left: 50%;
  width: 100px;
  height: 100px;
  margin: -50px 0 0 -50px;
  background-color: #1989fa;
}
.custom-enter-active-class,
.custom-leave-active-class {
  transition-property: background-color, transform;
}

.custom-enter-class,
.custom-leave-to-class {
  background-color: red;
  transform: rotate(-360deg) translate3d(-100%, -100%, 0);
}

Props

NameDescriptionTypeRequiredDefault
show是否展示组件Booleanfalse默认值是:false
name动画类型'fade' / 'fade-down' / 'fade-left' / 'fade-right' / 'fade-up'/ 'slide-down' / 'slide-left' / 'slide-right' / 'slide-up' / 'zoom-in' / 'zoom-out'false默认值是:fade
duration动画时长,单位为毫秒Object / Numberfalse默认值是:300
customStyle自定义样式Stringfalse-
customClass根节点样式类Stringfalse-
enterClass定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。Stringfalse-
enterActiveClass定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。Stringfalse-
enterToClass定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 enter-class 被移除),在过渡/动画完成之后移除。Stringfalse-
leaveClass定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。Stringfalse-
leaveActiveClass定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。Stringfalse-
leaveToClass定义离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时 leave-class 被删除),在过渡/动画完成之后移除。Stringfalse-

Events

Event NameDescriptionParameters
click组件被点击时触发value:string 动画展示状态,可选值enterleave
before-enter进入前触发-
enter进入中触发-
before-leave离开前触发-
leave离开中触发-
after-leave离开后触发-
after-enter进入后触发-

Slots

NameDescriptionDefault Slot Content
default包裹元素-