# Transition 动画

# 引入
在 app.json 或 index.json 中引入组件,详细介绍见快速上手
"usingComponents": {
  "lin-transition": "/dist/transition/index"
}
# 基础使用
将元素包裹在 transition 组件内,在元素展示/隐藏时,会有相应的过渡动画
代码示例
<lin-cell-group>
  <lin-cell data-show="show1" bind:click="setShowData" title="Fade" is-link />
  <lin-cell
    data-show="show2"
    bind:click="setShowData"
    title="Fade Up"
    is-link
  />
  <lin-cell
    data-show="show3"
    bind:click="setShowData"
    title="Fade Down"
    is-link
  />
  <lin-cell
    data-show="show4"
    bind:click="setShowData"
    title="Fade Left"
    is-link
  />
  <lin-cell
    data-show="show5"
    bind:click="setShowData"
    title="Fade Right"
    is-link
  />
  <lin-cell
    data-show="show6"
    bind:click="setShowData"
    title="Slide Up"
    is-link
  />
  <lin-cell
    data-show="show7"
    bind:click="setShowData"
    title="Slide Down"
    is-link
  />
  <lin-cell
    data-show="show8"
    bind:click="setShowData"
    title="Slide Left"
    is-link
  />
  <lin-cell
    data-show="show9"
    bind:click="setShowData"
    title="Slide Right"
    is-link
  />
</lin-cell-group>
<lin-transition
  data-show="show1"
  show="{ {show1}}"
  bind:after-enter="afterEnter"
>
  <view class="transition-content">
    fade
  </view>
</lin-transition>
<lin-transition
  name="fade-up"
  data-show="show2"
  show="{ {show2}}"
  bind:after-enter="afterEnter"
>
  <view class="transition-content">
    Fade Up
  </view>
</lin-transition>
<lin-transition
  name="fade-down"
  data-show="show3"
  show="{ {show3}}"
  bind:after-enter="afterEnter"
>
  <view class="transition-content">
    Fade Down
  </view>
</lin-transition>
<lin-transition
  name="fade-left"
  data-show="show4"
  show="{ {show4}}"
  bind:after-enter="afterEnter"
>
  <view class="transition-content">
    Fade Left
  </view>
</lin-transition>
<lin-transition
  name="fade-right"
  data-show="show5"
  show="{ {show5}}"
  bind:after-enter="afterEnter"
>
  <view class="transition-content">
    Fade Right
  </view>
</lin-transition>
<lin-transition
  name="slide-up"
  data-show="show6"
  show="{ {show6}}"
  bind:after-enter="afterEnter"
>
  <view class="transition-content">
    Slide Up
  </view>
</lin-transition>
<lin-transition
  name="slide-down"
  data-show="show7"
  show="{ {show7}}"
  bind:after-enter="afterEnter"
>
  <view class="transition-content">
    Slide Down
  </view>
</lin-transition>
<lin-transition
  name="slide-left"
  data-show="show8"
  show="{ {show8}}"
  bind:after-enter="afterEnter"
>
  <view class="transition-content">
    Slide Left
  </view>
</lin-transition>
<lin-transition
  name="slide-right"
  data-show="show9"
  show="{ {show9}}"
  bind:after-enter="afterEnter"
>
  <view class="transition-content">
    Slide Right
  </view>
</lin-transition>
Page({
  data: {
    show1: false,
    show2: false,
    show3: false,
    show4: false,
    show5: false,
    show6: false,
    show7: false,
    show8: false,
    show9: false,
  },
  setShowData(event) {
    const key = event.currentTarget.dataset.show;
    this.setData({ [key]: true });
  },
  afterEnter(event) {
    setTimeout(() => {
      const key = event.currentTarget.dataset.show;
      this.setData({ [key]: false });
    }, 1000);
  },
});
# 自定义动画
代码示例
<lin-cell-group>
  <lin-cell
    data-show="show10"
    bind:click="setShowData"
    title="自定义"
    is-link
  />
</lin-cell-group>
<lin-transition
  bind:after-leave="afterLeave"
  bind:after-enter="afterEnter"
  data-show="show10"
  show="{ { show10 }}"
  name=""
  duration="{ { { enter: 300, leave: 1000 } }}"
  enter-class="tran-enter-class"
  enter-active-class="tran-enter-active-class"
  leave-active-class="tran-leave-active-class"
  leave-to-class="tran-leave-to-class"
>
  <view class="transition-content">
    自定义
  </view>
</lin-transition>
Page({
  data: {
    show10: false,
  },
  setShowData(event) {
    const key = event.currentTarget.dataset.show;
    this.setData({ [key]: true });
  },
  afterEnter(event) {
    setTimeout(() => {
      const key = event.currentTarget.dataset.show;
      this.setData({ [key]: false });
    }, 1000);
  },
});
.transition-content {
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center;
  width: 200rpx;
  height: 200rpx;
  color: #fff;
  background-color: #409eff;
}
.transition-wrapper {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
.tran-enter-active-class,
.tran-leave-active-class {
  transition-property: background-color, transform;
}
.tran-enter-class,
.tran-leave-to-class {
  background-color: red;
  transform: rotate(-360deg) translate3d(-100%, -100%, 0);
}
# 属性
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 
|---|---|---|---|---|
| customStyle | 自定义样式 | String | — | — | 
| show | 是否展示组件 | Boolean | — | true | 
| duration | 动画时长,单位为毫秒 | Number , Object:{enter: number, leave: number} | — | 300 | 
| name | 动画类型 | String | — | fade | 
# 事件
| 事件名 | 说明 | 参数 | 
|---|---|---|
| bind:before-enter | 进入前触发 | — | 
| bind:enter | 进入中触发 | — | 
| bind:after-enter | 进入后触发 | — | 
| bind:before-leave | 离开前触发 | — | 
| bind:leave | 离开中触发 | — | 
| bind:after-leave | 离开后触发 | — | 
# 外部样式类
| 类名 | 说明 | 
|---|---|
| custom-class | 根节点样式类 | 
| enter-class | 定义进入过渡的开始状态 | 
| enter-active-class | 定义进入过渡生效时的状态 | 
| enter-to-class | 定义进入过渡的结束状态 | 
| leave-class | 定义离开过渡的开始状态 | 
| leave-active-class | 定义离开过渡生效时的状态 | 
| leave-to-class | 定义离开过渡的结束状态 | 
# 动画类型
| 名称 | 说明 | 
|---|---|
| fade | 淡入 | 
| fade-up | 上滑淡入 | 
| fade-down | 下滑淡入 | 
| fade-left | 左滑淡入 | 
| fade-right | 右滑淡入 | 
| slide-up | 上滑进入 | 
| slide-down | 下滑进入 | 
| slide-left | 左滑进入 | 
| slide-right | 右滑进入 |