• 基于vux的Vue路由切换动画


    const history = window.sessionStorage
    history.clear()
    let historyCount = history.getItem('count') * 1 || 0
    history.setItem('/index', 0)
    
    router.beforeEach((to, from, next) => {
      const toIndex = history.getItem(to.path)
      const fromIndex = history.getItem(from.path)
      if (toIndex) {
        if (!fromIndex || parseInt(toIndex, 10) > parseInt(fromIndex, 10) || (toIndex === '0' && fromIndex === '0')) {
          store.commit('UPDATE_DIRECTION', { direction: 'forward' })
        } else {
          store.commit('UPDATE_DIRECTION', { direction: 'reverse' })
        }
      } else {
        ++historyCount
        history.setItem('count', historyCount)
        to.path !== '/index' && history.setItem(to.path, historyCount)
        store.commit('UPDATE_DIRECTION', { direction: 'forward' })
      }
      next()
    })
    

      

    const state = {
      direction: 'forward'
    }
    

      

    <template>
      <div id="app">
        <transition :name="'pop-' + (direction === 'forward' ? 'in' : 'out')">
          <router-view></router-view>
        </transition>
      </div>
    </template>
    
    <script>
      import { mapState } from 'vuex'
    
      export default {
        computed: {
          ...mapState({
            direction: state => state.common.direction
          })
        }
      }
    </script>
    
    <style>
      .pop-out-enter-active, .pop-out-leave-active, .pop-in-enter-active, .pop-in-leave-active {
        will-change: transform;
        transition: .38s ease-in-out, visibility .38s;
        height: 100%;
         100%;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        position: absolute;
        -webkit-perspective: 1000;
        perspective: 1000;
      }
    
      .pop-out-enter {
        opacity: 0;
        transform: translate3d(-100%, 0, 0);
      }
    
      .pop-out-leave-active {
        opacity: 0;
        transform: translate3d(100%, 0, 0);
      }
    
      .pop-in-enter {
        opacity: 0;
        transform: translate3d(100%, 0, 0);
      }
    
      .pop-in-leave-active {
        opacity: 0;
        transform: translate3d(-100%, 0, 0);
      }
    </style>
    

      

  • 相关阅读:
    【UVa 1592】Database
    【UVa 400】Unix ls
    【UVa 136】Ugly Numbers
    【UVa 540】Team Queue
    【Uva 12096】The SetStack Computer
    【POJ 1050】To the Max
    【UVa 156】Ananagrams
    【UVa 10815】Andy's First Dictionary
    [HNOI/AHOI2018]转盘
    CF46F Hercule Poirot Problem
  • 原文地址:https://www.cnblogs.com/QQPrincekin/p/11684803.html
Copyright © 2020-2023  润新知