美文网首页
2020-02-12

2020-02-12

作者: 我是萌哒哒小羊 | 来源:发表于2020-02-12 11:58 被阅读0次

    vue半场动画

    !vue动画也有生命周期

    <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) {
        // ...
      }
    }
    

    自己的代码 在传enter的时候需要将done传进去

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title></title>
            <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
            <style>
                .ball{
                    margin-top: 10px;
                    margin-left: 30px;
                    width: 15px;
                    height: 15px;
                    border-radius: 50%;
                    background-color: crimson;
                }
            </style>
        </head>
        <body>
            <div id="app">
                <input type="button" value="购物车" @click="flag = !flag" >
                <transition 
                @before-enter="beforeEnter" 
                @enter="enter"
                @after-enter="afterEnter">
                <div class="ball" v-show="flag"></div>
                </transition>
            </div>
            
            <script type="text/javascript">
                var vm = new Vue({
                    el:'#app',
                    data:{
                        flag :'false'
                    },
                    methods:{
                        beforeEnter(el){
                            el.style.transform = "translate(0,0)"
                        },
                        enter(el,done){
                            //这句话没有实际的作用,但是,如果不写,写不出来动画效果
                            //可以认为 el.offsetWidth 会强制动画刷新
                            el.offsetWidth
                            el.style.transform = "translate(150px,450px)"
                            el.style.transition = 'all 1s ease'
                            //这里的done,起始就是afterEnter这个函数,也就是说:done是afterEnter函数引用
                            done()
                        },
                        afterEnter(el){
                            this.flag =! this.flag
                        }
                    }
                })
            </script>
        </body>
    </html>
    
    
    image.png

    相关文章

      网友评论

          本文标题:2020-02-12

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