美文网首页
温故而知新之VUE(四)

温故而知新之VUE(四)

作者: lmmy123 | 来源:发表于2018-11-07 21:11 被阅读10次

    进入\离开&列表过渡

    单元素/组件的过渡

    transition

    // 没有name,css默认为v-enter...
    <transition name='fade'>
        <p v-if="show">hello</p>
    </transition>
    
    .fade-enter-active,.fade-leave-active{
      transition: opacity .5s
    }
    .fade-enter,.fade-leave-to{
      opacity:0
    }
    

    #过渡的类名

    • v-enter 定义进入过渡的开始状态,元素插入之前生效
    • v-enter-active 定义进入过渡生效时的状态,在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除,定义进入过渡的过程时间,延迟和曲线函数
    • v-enter-to 2.1.8+ 定义进入过渡的结束状态
    • v-leave 定义离开过渡的开始状态
    • v-leave-active 定义离开过渡生效时的状态
    • v-leave-to 2.1.8+ 定义离开过渡的结束状态
      #css动画
      动画中的v-enter类名在节点插入DOM后不会立即删除,而是在animationend事件触发时删除
    .v-active{
      animation: bounce-in .5s
    }
    .v-leave-actiove{
      animation: bounce-in .5s reverse
    }
    @keyframes bounce-in{
      0% {
            transform:scale(0)
      }
      100%{
           tranform:scale(1)
      }
    }
    

    #自定义过渡的类名

    • enter-class
    • enter-active-class
    • enter-to-class (2.1.8+)
    • leave-class
    • leave-active-class
    • leave-to-class(2.1.8+)
      优先级高于普通的类名,可以结合第三方css动画库(Animate.css)
      #同时使用过渡和动画
      #显性的过渡持续时间
      2.2.0+新增
    <transition :duration="{enter: 500, leave: 800}"></transition>
    

    #javascript钩子

    <transition 
     @before-enter='beforeEnter'
     @enter="enter" 
     @after-enter="afterEnter" 
     @enter-cancelled="enterCancelled"
     @before-leave="beforeLeave" 
     @leave="leave" 
     @after-leave="afterLeave"
     @leave-cancelled="leaveCancelled" ></transition>
    
    // methods中定义这些方法
    

    当只用JavaScript过渡的时候,在enter和leave中必须使用done进行回调,否则会被同步调用
    推荐对于仅使用JavaScript过渡的元素添加"v-bind:css='false'",vue会跳过css的检测,避免过渡过程中CSS的影响
    #初始渲染的过渡
    可以通过appear特性设置节点在初始渲染的过渡

    <transition appear appear-class="xx" appear-to-class="sss" appear-active-class='dfsdf'></transition>
    

    #多个元素的过渡
    对于原生标签可以使用v-if/v-else

    // 设置key
    <transition>
        <button v-if="isEditing" key='save'>save</button>
        <button v-else key='edit'>edit</button>
    </transition>
    
    // 简写
    <transition>
      <button :key="text">
          {{text? 'save': 'edit'}}
      </button>
    </transition>
    

    #过渡模式

    • in-out 新元素先进行过渡,完成之后当前元素过渡离开
    • out-in 当前元素先进行过渡,完成之后新元素过渡进入
    <transition name='fade' mode='out-in' ></transition>
    
    多个组件的过渡
    <transition name=''component-fade" mode="out-in">
      <component :is="view"></component>
    </transition>
    
    列表过渡

    使用<transition-grounp>组件

    • 会呈现出一个真实的标签<span>,可以通过tag修改
    • 过渡模式 mode不可用
    • 内部元素总是需要提供唯一的key属性值
    <transition-group name='list' tag='p'>
      <span v-for="item in items" :key='item'>{{ item }}</span>
    </transition-group>
    
    列表的排序过渡

    <transition-group>还可以改变定位,使用v-move特性
    通过name属性来自定义前缀,也可以通过move-class属性手动设置

    <transition-group name='fade' tag='ul'>
      <liv-for="item in items" :key='item'>{{ item }}</li>
    </transition>
    
    .fade-move{
      transition: transform 1s;
    }
    
    可复用的过渡

    要创建一个可复用过渡组件,你需要做的就是将 <transition> 或者 <transition-group> 作为根组件,然后将任何子组件放置在其中就可以了。

    动态过渡

    相关文章

      网友评论

          本文标题:温故而知新之VUE(四)

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