vue-cil項目APP左右翻頁效果實現


  • App.vue (頁面)

    <transition :name="pageAnimate" :duration="{ enter: 1000, leave: 1000 }">
        <router-view/>
    </transition>
    
  • App.vue (CSS)

    /***(過度開始)***/
    .forward-enter,
    .forward-leave {
      transform: translateX(100%); 
    }
    .back-enter,
    .back-leave {
      transform: translateX(-100%); 
    }
    /***(過度進行中)***/
    .forward-enter-active,
    .forward-leave-active,
    .back-enter-active,
    .back-leave-active, {
      transition: all 1s;
    }
    /***(過度結束)***/
    .forward-enter-to {
      transform: translateX(0); 
    }
    .forward-leave-to, {
      transform: translateX(-100%); 
    }
    .back-enter-to {
      transform: translateX(0); 
    }
    .back-leave-to {
      transform: translateX(100%); 
    }
    
    //備注
    每個頁面的容器必須設置定位(星星)
    .box{position: fixed; top: 0; bottom: 0; left: 0; right: 0;}
    
  • App.vue (監控路由)

    export default {
      name: 'App',
      data(){
        return {
          pageAnimate: 'back'
        }
      },
      watch:{
        $route(to,from,d){
          // 路由切換翻頁效果
          if(this.$store.state.historyRouter.includes(to.path)){
            this.pageAnimate = 'back'
          }else {
            this.pageAnimate = 'forward'
          }
          //保存路由
          let historyRouter = this.$store.state.historyRouter;
          let routerMaxLen = this.$store.state.routerMaxLen;//路由最大長度
          if(!historyRouter.includes(to.path)){
              historyRouter.push(to.path)
          }
          if(historyRouter.length > routerMaxLen){
              historyRouter.splice(0,1)
          }
          this.$store.dispatch('changeState', {attr: 'historyRouter', params: historyRouter})
        }
      },
    }
    
  • VueX store.js(設置路由緩存)

    export default new Vuex.Store({
        state: {
            historyRouter: [],//所有訪問過的路由
            routerMaxLen: 3,//路由最大長度
        },
        mutations: {
            //state改變
            changeState(state,{ attr,params }){
                state[attr] = params;
            }
        },
        actions: {
            //state改變
            changeState({ state },{ attr,params }) {
                state[attr] = params;
            },
        },
        getters: {
            
        },
        modules: {
    
        }
    })
    

附: 翻頁動畫css

@keyframes fold-left-in {
  0% {
    transform: translate3d(100%, 0, 0);
  }
  100% {
    transform: translate3d(0, 0, 0);
  }
}

@keyframes fold-left-out {
  0% {
    transform: translate3d(0, 0, 0);
  }
  100% {
    transform: translate3d(-100%, 0, 0);
  }
}
/* 右進 */
@keyframes fold-right-in {
  0% {
    transform: translate3d(-100%, 0, 0);
  }
  100% {
    transform: translate3d(0, 0, 0);
  }
} 

@keyframes fold-right-out {
  0% {
    transform: translate3d(0, 0, 0);
  }
  100% {
    transform: translate3d(100%, 0, 0);
  }
} 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM