Skip to main content

transition标签使用

< transition > 标签使用动画的几种方式

方法1:配合 animate.css 动画

方法2、利用 name-enter/leave 的几个钩子

方法3、利用 beforeEnter/enter/afterEnter 函数钩子,在vue实例内改变样式,达到过渡

标签< transition >

从 vue2.x 到vue3都存在的内置标签,其集成了 animate.css,引用官方原介绍:

  • 自动为 CSS 过渡和动画应用 class;
  • 集成第三方 CSS 动画库,例如 animate.css
  • 在过渡钩子期间使用 JavaScript 直接操作 DOM;
  • 集成第三方 JavaScript 动画库。

过渡/动画

原理是对元素标签添加和删除动画class的方式,所以相同的方法也可以实现css的动画。vue还为每次过渡时建立了6个过渡阶段,可以理解为生命周期或者钩子。

  • v-enter-from
  • v-enter-active
  • v-enter-to
  • v-leave-from
  • v-leave-active
  • v-leave-to

form:对应进入的开始

active:对应动画进行中的生效状态,

to:对应过度结束的状态

官方图解

注意:vue2与vue3的进入阶段命名不一样

vue2

vue3

如何使用

为 v-show 添加过渡

  //- =======================================产品|场景 切换区===========================================
.slider__curtains-scroll
transition(name="slider")
//- 产品 start
.slider__curtains-list(v-show="productType == 'product'")
.slider__curtains-list-column(
v-for="(item, index) in productList",
:key="index",
:class="{ 'curtains-selected': productIndex == index }",
@click="changeProduct(index, item)"
)
//- img.slider__curtains-list-img(v-lazy="`${imgHost}/${item.urlThumb}`")
img.slider__curtains-list-img(
:src="`${imgHost}/${item.urlThumb}`",
@error="onError($event, `${imgHost}/${item.urlThumb}`)"
)
.slider__curtains-list-name {{ item.product_name }}
//- 产品 end

transition(name="slider")
//- 场景 start
.slider__curtains-list(v-show="productType == 'scene'")
.slider__curtains-list-column(
v-for="(item, index) in sceneList",
:key="index",
:class="{ 'curtains-selected': sceneIndex == index }",
@click="changeScene(index, item)"
)
//- img.slider__curtains-list-img(v-lazy="`${imgHost}/${item.urlThumb}`")
img.slider__curtains-list-img(
:src="`${imgHost}/${item.urlThumb}`",
@error="onError($event, `${imgHost}/${item.urlThumb}`)"
)

.slider__curtains-list-name {{ item.name }}
//- 场景 end
</template>
  • vue2
// 进入的钩子,如果是vue3, 第一个钩子使用 ****-enter-from
.slider-enter
transform translateX(200px)
opacity 0

.slider-enter-active
transition all 0.5s ease

.slider-to
transform translateX(0)
opacity 1

// 离开的钩子,如果是vue3, 第一个钩子使用 ****-enter-from
.slider-leave
transition all 0.5s ease
opacity 1

.slider-leave-active
transition all 0.5s ease
opacity 1

.slider-leave-to
transform translateX(-200px)
opacity 0
  • vue3

版本区别

1、进入的钩子名字vue2.x 采用的是 name-enter 而 vue3 采用了 name-enter-from,更加语义化了