欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue 巧用過(guò)渡效果(小結(jié))

 更新時(shí)間:2018年09月22日 09:16:28   作者:xanggang  
這篇文章主要介紹了vue 巧用過(guò)渡效果(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

vue提供的了transition組件來(lái)實(shí)現(xiàn)組件的過(guò)渡和路由的過(guò)渡,合理使用這個(gè)組建可以讓我們的頁(yè)面更加的靈活,提高用戶體驗(yàn)。

概念

在進(jìn)入/離開(kāi)的過(guò)渡中, 會(huì)有6個(gè)class的切換, 抄一張官方的圖

  • v-enter:定義進(jìn)入過(guò)渡的開(kāi)始狀態(tài)。在元素被插入之前生效,在元素被插入之后的下一幀移除。
  • v-enter-active:定義進(jìn)入過(guò)渡生效時(shí)的狀態(tài)。在整個(gè)進(jìn)入過(guò)渡的階段中應(yīng)用,在元素被插入之前生效,在過(guò)渡/動(dòng)畫(huà)完成之后移除。這個(gè)類可以被用來(lái)定義進(jìn)入過(guò)渡的過(guò)程時(shí)間,延遲和曲線函數(shù)。
  • v-enter-to: 2.1.8版及以上 定義進(jìn)入過(guò)渡的結(jié)束狀態(tài)。在元素被插入之后下一幀生效 (與此同時(shí) v-enter 被移除),在過(guò)渡/動(dòng)畫(huà)完成之后移除。
  • v-leave: 定義離開(kāi)過(guò)渡的開(kāi)始狀態(tài)。在離開(kāi)過(guò)渡被觸發(fā)時(shí)立刻生效,下一幀被移除。
  • v-leave-active:定義離開(kāi)過(guò)渡生效時(shí)的狀態(tài)。在整個(gè)離開(kāi)過(guò)渡的階段中應(yīng)用,在離開(kāi)過(guò)渡被觸發(fā)時(shí)立刻生效,在過(guò)渡/動(dòng)畫(huà)完成之后移除。這個(gè)類可以被用來(lái)定義離開(kāi)過(guò)渡的過(guò)程時(shí)間,延遲和曲線函數(shù)。
  • v-leave-to: 2.1.8版及以上 定義離開(kāi)過(guò)渡的結(jié)束狀態(tài)。在離開(kāi)過(guò)渡被觸發(fā)之后下一幀生效 (與此同時(shí) v-leave 被刪除),在過(guò)渡/動(dòng)畫(huà)完成之后移除。

看起來(lái)還是有有點(diǎn)亂,先來(lái)捋一下。

enter 定義開(kāi)始的狀態(tài), active定義過(guò)程, enter定義結(jié)束, 但是在實(shí)際進(jìn)行的時(shí)候是有交叉的。 通過(guò)斷點(diǎn)可以發(fā)現(xiàn),

  • 添加v-enter
  • 添加v-enter-active,
  • 卸載v-enter
  • 添加v-ernter-to
  • 卸載v-enter-to和v-enter-active
// transition: all 2s; 
 .move-enter {
  margin-left: 0;
 }
 .move-enter-active {
  margin-left: 100px;
 }
 .move-enter-to {
  margin-left: 200px;
 }

例如在上面這種情況下, 過(guò)渡動(dòng)畫(huà)會(huì)怎么進(jìn)行呢?

這里要注意兩點(diǎn)。

  1. enter-active覆蓋掉了enter的起點(diǎn)位置
  2. 一共經(jīng)過(guò)了兩次過(guò)渡, enter-to是在active結(jié)束之后開(kāi)始的, 所以第四秒, 才回到dom元素本身的位置。

所以官方文檔之, 也是使用v-enter定義起點(diǎn)位置, 在enter-active中控制效果。

利用class實(shí)現(xiàn)過(guò)渡效果

在這6個(gè)class之上, 利用transition或者動(dòng)畫(huà), 都可以實(shí)現(xiàn)我們需要的效果。 舉個(gè)栗子, 這里我們直接將所有的路由改變都定義一個(gè)過(guò)渡效果,

appear屬性表示頁(yè)面初次加載的時(shí)候也適用于動(dòng)畫(huà)

 <transition appear name="move">
  <router-view></router-view>
 </transition>
@keyframes animationIn {
 0% {
 transform: translate(-100%, 0);
 }
 100% {
 transform: translate(0, 0);
 }
}
@keyframes animationOut {
 0% {
 transform: translate(0, 0);
 }
 100% {
 transform: translate(100%, 0);
 }
}

.move-enter {
 transform: translate(-100%, 0);
 position: absolute!important;
 z-index: 999;
 top: 0;
 left: 0;
 width: 100%;
}
.move-enter-active {
 animation: animationIn 0.2s;
 position: absolute!important; // 進(jìn)入的組件要覆蓋掉移除的組件,參考 //https://cn.vuejs.org/v2/guide/transitions.html#%E8%BF%87%E6%B8%A1%E6%A8%A1%E5%BC%8F
 z-index: 999;
 top: 0;
 left: 0;
 width: 100%;
}
.move-leave {
 transform: translate(0, 0);
}
.move-leave-active {
 animation: animationOut 0.2s;
}

效果

JavaScript 鉤子

這些鉤子函數(shù)可以結(jié)合 CSS transitions/animations 使用

<transition
 v-on:before-enter="beforeEnter"
 v-on:enter="enter"
 v-on:after-enter="afterEnter"
 v-on:enter-cancelled="enterCancelled"

 v-on:before-leave="beforeLeave"
 v-on:leave="leave"
 v-on:after-leave="afterLeave"
 v-on:leave-cancelled="leaveCancelled"
>
 <!-- ... -->
</transition>

在這些鉤子中, 可以使用其他第三方庫(kù),回調(diào)中的el將是真實(shí)的dom元素 舉個(gè)栗子, 這里使用了官方推薦的Velocity.js作為動(dòng)畫(huà)庫(kù)

 <div class="main">
  <transition name="showRect" appear
     @before-enter="handleBeforeEnter"
     @enter="handleEnter"
     @after-enter="handleAfterEnter"
     @before-leave="handleBeforeLeave"
     @leave="handleLeave"
     @after-leave="handleAfterLeave"
     :css="false">
  <div class="box" v-if="show"></div>
  </transition>
 </div>
 <button @click="start">切換</button>
 methods: {
  start() {
  this.show = !this.show
  },
  handleBeforeEnter: function (el) {
  el.style.opacity = 0;
  console.log('方塊顯示動(dòng)畫(huà)即將執(zhí)行');
  },
  handleEnter: function (el, done) {
  Velocity(el, 'stop');
  Velocity(el, {
   backgroundColor: '#0085eb',
   opacity: 1,
   translateX: 260,
   rotateZ: ['360deg', 0]
  }, {
   duration: 1000,
   easing: [ 0.4, 0.01, 0.165, 0.99 ],
   complete: done
  });
  console.log('方塊顯示動(dòng)畫(huà)執(zhí)行中...');
  },
  handleAfterEnter: function (el) {
  console.log('方塊顯示動(dòng)畫(huà)結(jié)束');
  },
  handleBeforeLeave: function (el) {
  console.log('方塊隱藏動(dòng)畫(huà)即將執(zhí)行');
  },
  handleLeave: function (el, done) {
  Velocity(el, 'stop');
  Velocity(el, {
   backgroundColor: '#4dd0e1',
   opacity: 0,
   translateX: 0,
   rotateZ: [0, '360deg']
  }, {
   duration: 1000,
   easing: [ 0.4, 0.01, 0.165, 0.99 ],
   complete: done
  });
  console.log('方塊隱藏動(dòng)畫(huà)執(zhí)行中...');
  },
  handleAfterLeave: function (el) {
  console.log('方塊隱藏動(dòng)畫(huà)結(jié)束');
  }
 }

列表過(guò)渡

vue還提供了transition-group組件, 作為列表過(guò)渡的容器

不同于 ,它會(huì)以一個(gè)真實(shí)元素呈現(xiàn):默認(rèn)為一個(gè) 。你也可以通過(guò) tag 特性更換為其他元素

transition-group 擁特別的v-move屬性,它會(huì)在元素的改變定位的過(guò)程中應(yīng)用, 效果可參見(jiàn)官網(wǎng)。

其他的就不抄官網(wǎng)了

列表過(guò)渡中, 可以結(jié)合js鉤子, 實(shí)現(xiàn)一些特殊的效果

舉個(gè)栗子

<template>
 <div>
 <div class="btn" @click="addItem">添加</div>
 <div class="btn" @click="sort">排序</div>
 <div class="box">
  <div class="item-bar">
  <transition-group name="fade" tag="p" appear
  v-on:before-enter="beforeEnter"
  v-on:after-enter="afterEnter">
  // 這里的data-index 是一個(gè)識(shí)別標(biāo)識(shí), 便于在js鉤子中獲得當(dāng)前元素的序號(hào)
   <div class="item" v-for="(i, index) in list" :key="i" :data-index="index">{{i}}</div>
  </transition-group>
  </div>
 </div>
 </div>
</template>
<script lang="ts">
 import Vue from "vue";
 export default Vue.extend({
 name: "home",
 data() {
  return {
  show: true,
  list: [5,4,3,2,1],
  nextNum: 6
  };
 },
 methods: {
  showDom() {
  this.show = !this.show
  },
  beforeEnter: function (el: any) {
  el.style.opacity = 0 // 每個(gè)元素插入之前, 透明度為0
  let index = el.dataset.index 每次可能插入多個(gè)元素,
  // 頁(yè)面加載時(shí)先展示5個(gè)
  if (index < 5) {
   //設(shè)置動(dòng)畫(huà)延遲, 實(shí)現(xiàn)按續(xù)插入的效果
   el.style.animationDelay = el.dataset.index * 0.3 + 's'
  }
  },
  afterEnter: function (el) {
  el.style.opacity = 1
  console.log('afterEnter')
  },
  addItem() {
  this.list.push(this.nextNum++)
  },
  sort() {
  this.list = this.list.sort((a, b) => a -b)
  }
 }
 });
</script>
 @keyframes animat {
 0% {
  margin-left: 300px;
  opacity: 0;
 }
 100% {
  margin-left: 0;
  opacity: 1;
 }
 }
 .fade-enter {
 opacity: 0;
 margin-left: 300px;
 }
 .fade-enter-active {
 opacity: 0;
 animation: animat 1s;
 }
 .fade-enter-to {
 opacity: 1;
 margin-left: 0;
 }

 .fade-move {
 transition: all 0.3s;
 }
 .fade-leave {
 left: 10px;
 }
 .fade-leave-active {
 transition: all 2s ease-out;
 }
 .fade-leave-to {
 left: -100%;
 }

效果

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue項(xiàng)目打包之后接口出現(xiàn)錯(cuò)誤的問(wèn)題及解決

    vue項(xiàng)目打包之后接口出現(xiàn)錯(cuò)誤的問(wèn)題及解決

    這篇文章主要介紹了vue項(xiàng)目打包之后接口出現(xiàn)錯(cuò)誤的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 詳解如何在Vue3+TS的項(xiàng)目中使用NProgress進(jìn)度條

    詳解如何在Vue3+TS的項(xiàng)目中使用NProgress進(jìn)度條

    本文主要介紹了詳解如何在Vue3+TS的項(xiàng)目中使用NProgress進(jìn)度條,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 一個(gè)基于vue3+ts+vite項(xiàng)目搭建初探

    一個(gè)基于vue3+ts+vite項(xiàng)目搭建初探

    當(dāng)市面上主流的組件庫(kù)不能滿足我們業(yè)務(wù)需求的時(shí)候,那么我們就有必要開(kāi)發(fā)一套屬于自己團(tuán)隊(duì)的組件庫(kù),下面這篇文章主要給大家介紹了一個(gè)基于vue3+ts+vite項(xiàng)目搭建的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • vue el-upload上傳文件的示例代碼

    vue el-upload上傳文件的示例代碼

    這篇文章主要介紹了vue el-upload上傳文件的示例代碼,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下
    2020-12-12
  • Vue如何使用cdn加載資源加快打包速度

    Vue如何使用cdn加載資源加快打包速度

    外部的庫(kù)文件,可以使用CDN資源,或者別的服務(wù)器資源等,下面這篇文章主要給大家介紹了關(guān)于Vue如何使用cdn加載資源加快打包速度的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • element-ui el-dialog嵌套table組件,ref問(wèn)題及解決

    element-ui el-dialog嵌套table組件,ref問(wèn)題及解決

    這篇文章主要介紹了element-ui el-dialog嵌套table組件,ref問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • vue?指令與過(guò)濾器案例代碼

    vue?指令與過(guò)濾器案例代碼

    這篇文章主要介紹了vue?指令與過(guò)濾器,本文通過(guò)案例代碼給大家詳細(xì)講解,給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11
  • Vue.js數(shù)字輸入框組件使用方法詳解

    Vue.js數(shù)字輸入框組件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Vue.js數(shù)字輸入框組件的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Springboot運(yùn)用vue+echarts前后端交互實(shí)現(xiàn)動(dòng)態(tài)圓環(huán)圖

    Springboot運(yùn)用vue+echarts前后端交互實(shí)現(xiàn)動(dòng)態(tài)圓環(huán)圖

    我們做項(xiàng)目的時(shí)候,常常需要一些統(tǒng)計(jì)圖來(lái)展示我們的數(shù)據(jù),作為web開(kāi)發(fā)人員,會(huì)實(shí)現(xiàn)統(tǒng)計(jì)圖是我們必會(huì)的技能。我將帶大家來(lái)實(shí)現(xiàn)動(dòng)態(tài)餅圖的實(shí)現(xiàn),感興趣的可以了解一下
    2021-06-06
  • vue-upload上傳圖片詳細(xì)使用方法

    vue-upload上傳圖片詳細(xì)使用方法

    這篇文章主要介紹了使用vue-upload上傳圖片的詳細(xì)使用說(shuō)明,文中有相關(guān)的代碼示例供大家參考,感興趣的小伙伴一起跟著小編來(lái)學(xué)習(xí)吧
    2023-05-05

最新評(píng)論