美文网首页
JavaScript 钩子与列表的交错过渡

JavaScript 钩子与列表的交错过渡

作者: me_coder | 来源:发表于2019-11-28 15:05 被阅读0次

JavaScript钩子

<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>
// ...
methods: {
  // --------
  // 进入中
  // --------

  beforeEnter: function (el) {
    // ...
  },
  // 当与 CSS 结合使用时
  // 回调函数 done 是可选的
  enter: function (el, done) {
    // ...
    done()
  },
  afterEnter: function (el) {
    // ...
  },
  enterCancelled: function (el) {
    // ...
  },

  // --------
  // 离开时
  // --------

  beforeLeave: function (el) {
    // ...
  },
  // 当与 CSS 结合使用时
  // 回调函数 done 是可选的
  leave: function (el, done) {
    // ...
    done()
  },
  afterLeave: function (el) {
    // ...
  },
  // leaveCancelled 只用于 v-show 中
  leaveCancelled: function (el) {
    // ...
  }
}

注意:
(1)当只用 JavaScript 过渡的时候,在 enterleave 中必须使用 done 进行回调。否则,它们将被同步调用,过渡会立即完成;
(2)推荐对于仅使用 JavaScript 过渡的元素添加 v-bind:css="false",Vue 会跳过 CSS 的检测。这也可以避免过渡过程中 CSS 的影响。

列表的交错过渡

通过 data 属性与 JavaScript 通信 ,就可以实现列表的交错过渡:

<script src="https://cdnjs.cloudflare.com/ajax/libs/velocity/1.2.3/velocity.min.js"></script>

<div id="staggered-list-demo">
  <input v-model="query">
  <transition-group
    name="staggered-fade"
    tag="ul"
    v-bind:css="false"
    v-on:before-enter="beforeEnter"
    v-on:enter="enter"
    v-on:leave="leave"
  >
    <li
      v-for="(item, index) in computedList"
      v-bind:key="item.msg"
      v-bind:data-index="index"
    >{{ item.msg }}</li>
  </transition-group>
</div>
new Vue({
  el: '#staggered-list-demo',
  data: {
    query: '',
    list: [
      { msg: 'Bruce Lee' },
      { msg: 'Jackie Chan' },
      { msg: 'Chuck Norris' },
      { msg: 'Jet Li' },
      { msg: 'Kung Fury' }
    ]
  },
  computed: {
    computedList: function () {
      var vm = this
      return this.list.filter(function (item) {
        return item.msg.toLowerCase().indexOf(vm.query.toLowerCase()) !== -1
      })
    }
  },
  methods: {
    beforeEnter: function (el) {
      el.style.opacity = 0
      el.style.height = 0
    },
    enter: function (el, done) {
      var delay = el.dataset.index * 150
      setTimeout(function () {
        Velocity(
          el,
          { opacity: 1, height: '1.6em' },
          { complete: done }
        )
      }, delay)
    },
    leave: function (el, done) {
      var delay = el.dataset.index * 150
      setTimeout(function () {
        Velocity(
          el,
          { opacity: 0, height: 0 },
          { complete: done }
        )
      }, delay)
    }
  }
})

相关文章

  • JavaScript 钩子与列表的交错过渡

    JavaScript钩子 注意:(1)当只用 JavaScript 过渡的时候,在 enter 和 leave 中...

  • Vue中半场动画的实现

    JavaScript 钩子 可以在属性中声明 JavaScript 钩子 例: 当只用 JavaScript 过渡...

  • vue列表过渡

    列表过渡 实现 列表的进出过渡 列表的排序过渡 解决 示例 列表的交错过渡

  • 动画组件

    用vue自带的 实现过渡效果 利用 CSS 过渡或者动画来实现 利用 JavaScript 的钩子函数...

  • vue-列表过渡

    列表交错过渡 使用场景:通过Input 搜索关键字后,下方结果集带有自上而下展开与自下而上收缩的动画效果。 列表过...

  • vue实现加入购物车动画

    预备基础 vue的动画和过渡钩子 css3的transform 贝塞尔曲线 整体思路 定义商品列表,设置点击的元素...

  • Vue学习笔记进阶篇——列表过渡及其他

    本文为转载,原文:Vue学习笔记进阶篇——列表过渡及其他本文将介绍Vue中的列表过渡,动态过渡, 以及可复用过渡是...

  • 温故而知新之VUE(四)

    进入\离开&列表过渡 单元素/组件的过渡 transition #过渡的类名 v-enter 定义进入过渡的开始状...

  • 列表的排序过渡

    当插入或移除元素的时候,虽然有过渡动画,但是周围的元素会瞬间移动到新的位置,而不是平滑地过渡。为了实现平滑过渡,可...

  • vue中的钩子函数(一)

    钩子函数列表: beforeCreate created beforeMount mounted beforeUp...

网友评论

      本文标题:JavaScript 钩子与列表的交错过渡

      本文链接:https://www.haomeiwen.com/subject/qqtmwctx.html