transition Vue内置动画组件

Posted web-gmy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了transition Vue内置动画组件相关的知识,希望对你有一定的参考价值。

transition内置的组件

App.vue
<template>
  <div id="app">
    <div id="nav">
      <router-link to="/">Home</router-link>|
      <router-link to="/about">About</router-link>
    </div>
    <transition :name="move">
      <!-- keepalive和动画一起使用 动画要放到外层 -->
      <router-view />
    </transition>
  </div>
</template>
<script>
export default 
  data() 
    return 
      a:  name: 1 ,
      move: "slide-left" // 动画样式
    ;
  ,
  watch: 
    $route: 
      handler(to, from) 
        // 通过路由判断动画向左还是向右
        if (to && from) 
          if (to.meta.idx > from.meta.idx) 
            // 后面比前面大 做向左的动画
            this.move = "slide-left";
           else 
            // 否则是向右的动画
            this.move = "slide-right";
          
        
      ,
      immediate: true // 立即执行handler
      // deep: true, // 深层监控
      // lazy: true, // 懒加载 computed有缓存
    
  
;
</script>
<style lang="less">
.slide-left-enter,
.slide-left-enter-active,
.slide-right-enter,
.slide-right-enter-active 
  transition: all 0.5s;

.slide-left-enter,
.slide-right-leave-to 
  transform: translate(-100%);

.slide-left-leave-to,
.slide-right-enter 
  transform: translate(100%);

</style>
router/index.js
import Vue from "vue";
import VueRouter from "vue-router";
import Home from "../views/Home.vue";
import lazyC from "../lib/util";
Vue.use(VueRouter);
const routes = [
  
    path: "/",
    name: "home",
    component: Home,
    meta: 
      idx: 0
    
  ,
  
    path: "/about",
    name: "about",
    meta: 
      idx: 1
    ,
    component: lazyC(() => import("../views/About.vue"))
  
];
const router = new VueRouter(
  routes
);
export default router;
lib/util.js
import loading from "../components/Loading.vue";
const layC = asyncFunction => 
  const component = () => (
    component: asyncFunction(),
    loading
  );
  // layC最后要返回一个组件 cli 不支持template模板
  return 
    render: h => h(component)
  ;
;
export default layC;

components/Loading.vue
<template>
  <div>...加载中</div>
</template>

以上是关于transition Vue内置动画组件的主要内容,如果未能解决你的问题,请参考以下文章

transition Vue内置动画组件

Vue3过度和动画

Vue3过度和动画

vue内置的标签(组件)

Vue实现动画的几种方式

vue的动画组件(transition)