## 代码演示

### 基础用法

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

```html
<hd-button type="primary" @click="open">fade</hd-button>
<hd-transition :show="show" custom-class="block">你好</hd-transition>
```

``` ts
<script lang="ts" setup>

const show = ref<boolean>(false) // 是否展示

function open() {
  show.value = true
  setTimeout(() => {
    show.value = false
  }, 500)
}
</script>

```


### 过渡动画类型

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

```html
<button type="primary" @click="open">过渡动画</button>
<hd-transition :show="show" :name="name"></hd-transition>
```

``` ts
<script lang="ts" setup>

const show = ref<boolean>(false) // 是否展示
const name = ref<string>('fade') // 动画类型

function open() {
  show.value = true
  setTimeout(() => {
    show.value = false
  }, 500)
}
</script>

```


#### 动画类型

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


### 过渡动画持续时间

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

```html
<hd-button type="primary" @click="open">过渡动画</hd-button>
<hd-transition :show="show" :duration="duration"></hd-transition>
```

``` ts
<script lang="ts" setup>

const show = ref<boolean>(false) // 是否展示
const duration = ref<Record<string,number>>({ enter: 300, leave: 1000 }) 
 // 动画类型

function open() {
  show.value = !show.value
}
</script>

```

### 自定义样式和自定义类名

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

```html
<button type="primary" @click="open">过渡动画</button>
<hd-transition :show="show" :custom-style="styles" custom-class="custom-class"></hd-transition>
```

``` ts
<script lang="ts" setup>

const show = ref<boolean>(false) // 是否展示
const styles = ref<string>('position: fixed; bottom: 0;top: 0;left: 0;right: 0;backgroundColor: rgba(0, 0, 0, 0.4);') // 自定义样式
 // 动画类型

function open() {
  show.value = !show.value
}
</script>

```

### 高级用法

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

```html
<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"
/>
```


``` ts
<script lang="ts" setup>

const show = ref<boolean>(false) // 是否展示
 // 动画类型

function open() {
    this.show = !this.show
}
function onBeforeEnter() {
  console.log('before enter')
}
function onEnter() {
  console.log('enter')
}
function onAfterEnter() {
  console.log('after enter')
}
function onBeforeLeave() {
  console.log('before leave')
}
function onLeave() {
  console.log('leave')
}
function onAfterLeave() {
  console.log('after leave')
}
</script>

```

```css
:deep(.custom-class) {
  position: fixed;
  z-index: 999;
  top: 50%;
  left: 50%;
  width: 100px;
  height: 100px;
  margin: -50px 0 0 -50px;
  background-color: #1989fa;
}

:deep(.custom-enter-active-class, .custom-leave-active-class) {
  transition-property: background-color, transform;
}

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