美文网首页
VUE-动画

VUE-动画

作者: 哎呦呦胖子斌 | 来源:发表于2018-11-29 16:32 被阅读0次
    transition

    1. 使用<transiton>标签把要执行动画的DOM元素包裹起来,可以使用name属性给这个动画增加自定义名称

          <transition name="my">
            <h1 v-if="show">这是一个标题</h1>
          </transition>
    

    2. 给动画添加进场和入场动画

    .my-enter-active {
      transition: all .9s cubic-bezier(1.0, 0.5, 0.8, 1.0);
    }
    .my-leave-active {
      transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
    }
    .my-enter, .my-leave-to
    {
      transform: translateX(10px);
      opacity: 0;
    }
    
    image.png

    动画也有动画的钩子函数

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

    一个栗子
    加入购物车的动画效果

            <transition name="ball"
              v-on:before-enter="beforeEnter"
              v-on:enter="enter"
              v-on:after-enter="afterEnter">
              <div v-show="flag" style="height:20px;width:20px;border-radius:50%;background-color:red"></div>
            </transition>
    
        // 表示动画入场之前,此时动画尚未开始,可以在beforeEnter中设置开始动画之前的起始样式
        beforeEnter(el) {
          el.style.transform = "translate(0,0)";
        },
        // 表示动画开始之后的样式,结束状态
        enter(el, done) {
          el.offsetWidth;
          el.style.transform = "translate(260px,260px)";
          el.style.transition = "all 1s ease";
          done();
          // 在enter和leave方法中,回调函数done是必须的,
        },
        afterEnter(el) {
          this.flag = !this.flag;
        }
    
    transitionGroup

    在实现列表过渡的时候,如果需要过渡的元素是通过v-for循环渲染出来的,不能使用transition包裹,需要使用<transitionGroup>标签,如果要为v-for循环的元素设置动画,必须要为每一个元素设置:key属性,不然会报错。

            <input type="text" placeholder="请输入id" v-model="id">
            <input type="text" placeholder="请输入人名" v-model="name">
            <input type="submit" value="提交" @click="submit">
            <!-- <ul> -->
              <!-- 给transition-group添加appear属性,实现页面刚展示出来的时候入场的效果 -->
              <!-- 通过为transition-group设置tag属性,指定transition-group渲染为指定的元素,
                   如果不指定tag属性,默认渲染为span标签 -->
              <transition-group appear tag="ul">
                <li v-for="(item ,index) in list" :key="index"  @click="del(index)">
                  {{item.id}}-------{{item.name}}
                </li>
              </transition-group>
             
            <!-- </ul> -->
    
    .v-enter,
    .v-leave-to {
      opacity: 0;
      transform: translateY(80px);
    }
    
    .v-enter-active,
    .v-leave-active{
      transition: all 1s ease;  
    }
    
    /* .v-move {
      transition: all 1s ease;
    }
    
    .v-leave-active {
      position: absolute
    } */
    
        submit(){
          let per = {
            id:this.id,
            name:this.name
          };
          this.list.push(per);
        },
        del(e){
          this.list.splice(e,1);
        }
    
    mode属性

    多个元素同时生效的进入和离开过渡模式

    in-out:新元素先进行过渡,完成之后当前元素过渡离开

    out-in:当前元素先进行过渡,完成之后新元素过渡进入

    相关文章

      网友评论

          本文标题:VUE-动画

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