文章出處

前面的話

  與CSS過渡不同,JS過渡主要通過事件進行觸發。本文將詳細介紹Vue過渡效果之JS過渡

 

事件鉤子

  JS過渡主要通過事件監聽事件鉤子來觸發過渡,共包括如下的事件鉤子

<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>

  下面各個方法中,函數中的參數el表示要過渡的元素,可以設置不同情況下,el的位置、顏色等來控制其動畫的改變

// ...
methods: {
  // --------
  // 進入中
  // --------
  beforeEnter: function (el) {
    // ...
  },
  // 此回調函數是可選項的設置
  // 與 CSS 結合時使用
  enter: function (el, done) {
    // ...
    done()
  },
  afterEnter: function (el) {
    // ...
  },
  enterCancelled: function (el) {
    // ...
  },
  // --------
  // 離開時
  // --------
  beforeLeave: function (el) {
    // ...
  },
  // 此回調函數是可選項的設置
  // 與 CSS 結合時使用
  leave: function (el, done) {
    // ...
    done()
  },
  afterLeave: function (el) {
    // ...
  },
  // leaveCancelled 只用于 v-show 中
  leaveCancelled: function (el) {
    // ...
  }
}

  上面方法中,有兩個方法比較特殊,是enter()和leave()方法,它們接受了第二個參數done。當進入完畢或離開完畢后,會調用done()方法來進行接下來的操作

  [注意]對于僅使用JS過渡的元素添加 v-bind:css="false",Vue 會跳過 CSS 的檢測。這也可以避免過渡過程中 CSS 的影響

【簡單事例】

  下面是一個JS過渡的簡單事例

<div id="demo">
  <button @click="show = !show">Toggle</button>
  <transition v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:leave="leave" :css="false">
    <p v-if="show">Demo</p>
  </transition>
</div>
<script>
new Vue({
  el: '#demo',
  data: {
    show: false
  },
  methods: {
    beforeEnter: function (el) {
      el.style.opacity = 0
      el.style.transformOrigin = 'left'
    },
    enter: function (el, done) {
      Velocity(el, { opacity: 1, fontSize: '1.4em' }, { duration: 300 })
      Velocity(el, { fontSize: '1em' }, { complete: done })
    },
    leave: function (el, done) {
      Velocity(el, { translateX: '15px', rotateZ: '50deg' }, { duration: 600 })
      Velocity(el, { rotateZ: '100deg' }, { loop: 2 })
      Velocity(el, {rotateZ: '45deg',translateY: '30px',translateX: '30px',opacity: 0}, {complete: done })
    }
  }
})  
</script>

 

初始渲染過渡

  可以通過 appear 特性設置節點的在初始渲染的過渡,自定義 JavaScript 鉤子

<transition
  appear
  v-on:before-appear="customBeforeAppearHook"
  v-on:appear="customAppearHook"
  v-on:after-appear="customAfterAppearHook"
  v-on:appear-cancelled="customAppearCancelledHook"
>
  <!-- ... -->
</transition>

  下面是一個例子

<div id="demo">
  <button @click="reset">還原</button>
  <transition appear  :appear="customAppearHook">
    <p>小火柴的藍色理想</p>
  </transition>
</div>
<script>
new Vue({
  el: '#demo',
  methods:{
    reset(){
      history.go();
    }, 
    customAppearHook(el, done) {
      Velocity(el, {backgroundColor:"#ddd",translateX:200});
      Velocity(el,"reverse",{complete:done})
    }, 
  }
})
</script>

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()