VUE筆記 - 列表過渡動畫 v-enter, v-leave-to | v-enter-active, v-leave-active | v-move


 

本例要結合過渡動畫四個過程的示意圖一起理解。

https://cn.vuejs.org/v2/guide/transitions.html

 

疑問:

v-for="(item,i) in list"     del(i) 傳參不傳id,改成i ,這個是什么用法?

 

  <style>
  li{
    border: 1px dashed #999;
    margin: 5px;
    padding: 5px;
    line-height: 25px;
    font-size: 12px;
    width: 800px;
  }
  li:hover{
    background-color: hotpink;
    transition: all 0.8s ease;
  }
  .v-enter,.v-leave-to {
    /* .v-enter, .v-leave-to 設置的過渡樣式
    自動賦給transition 或 transitiongroup標簽了 */
    opacity: 0;
    transform: translateY(80px);
  }
  .v-enter-active, .v-leave-active {
    /* .v-enter-active, .v-leave-active 設置的過渡樣式
    自動賦給transition 或 transitiongroup標簽了 */
    transition: all 0.6s ease;
  }
  .v-move{ 
    transition: all 0.6s ease;
  }
  /* v-move 特性。會在元素的改變定位的過程中應用。
       比如列表中有元素被刪除,其他元素會上移
       設置了v-move就會在這起作用. */

  .v-leave-active{
    position: absolute;
    /* 當元素設置了  absolute  后,默認就不是100%的寬度了,而是內容多寬就是多寬
       所以要給li元素設置一下寬度. */
  }
  /* 用splice刪除數組的元素,由於刪除的元素經歷了一個過渡,始終占據文檔流的這個位置,
  因此下一個元素要等待其過渡消失后再移動過來,造成一個生硬的效果。

  要達到平滑過渡,就要在刪除元素leave-active階段,
  用position:absolute 讓刪除的元素脫離文檔流,后面的元素才能同時平滑過渡過來。
 */
  </style>
</head>
<body>
  <div id="app">
    ID:<input type="text" v-model="id">
    NAME:<input type="text" v-model="name">
    <input type="button" value="添加" @click="add()">

    <!-- 通過 appear 特性設置節點的在初始渲染的過渡
         也就是頁面剛加載的時候,實現過渡動畫 -->
    <transition-group tag="ul" appear>
      <li v-for="(item,i) in list" @click="del(i)" :key="item.id">
          <!-- v-for="(item,i) in list"  
           del(i)   傳參不傳id,改成i    ??? 這個是什么用法-->
          {{item.id}} --- {{item.name}}
      </li>
    </transition-group>
  </div>

  <script>
  var vm = new Vue({
    el:'#app',
    data:{
      id:'',
      name:'',
      list:[
        {id:1, name:'趙高'},  // list里用到的id name 等,要先定義在data
        {id:2, name:'秦檜'},
        {id:3, name:'嚴嵩'},
        {id:4, name:'魏忠賢'}
      ]
    },
    methods:{
      add(el){
        this.list.push({id:this.id, name:this.name});
        this.id = this.name = '';
      },
      del(i){
        this.list.splice(i,1); // i 的用法??
      },
    },
  });
  </script>
</body>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM