1. 程式人生 > 實用技巧 >Vue中的動畫、監聽見、過濾器、計算屬性

Vue中的動畫、監聽見、過濾器、計算屬性

1.動畫

基礎使用:

給哪個元素新增動畫,只需要給元素用<transition>標籤包裹起來就可以

<transition>
    <div class="box" v-show='isShow'></div>
</transition>

之後去樣式中設定6個類名即可

 .v-enter {
            opacity: 0;
        }
        .v-enter-to {
            opacity: 1;
        }
        .v-enter-active {
            transition: all 2s;
        }
        .v-leave {
            opacity: 1;
        }
        .v-leave-to {
            opacity: 0;
        }
        .v-leave-active {
            transition: all 2s;
        }

如果頁面中有多個元素需要新增不同的動畫,那麼只需要給<transition>增加name屬性,同時把6個樣式中的v-替換為name的值

 <transition name='aa'>
    <div class="box" v-show='isShow'></div>
 </transition>
 樣式中:
  .aa-enter {
  opacity: 0;
  }
.aa-enter-to {
opacity: 1;
}
.aa-enter-active {
transition: all 5s;
}
.aa-leave {
opacity: 1;
}
.aa-leave-to {
opacity: 0;
}
.aa-leave-active {
transition: all 5s;
}

2.動畫庫

官網:https://animate.style/

使用:引入css,給需要新增動畫的元素用<transition>包裹起來,然後新增屬性enter-active-classleave-active-class

 <!-- enter-active-class   leave-active-class 使用:引入第三庫 必須新增基類+效果類名 -->
     <transition 
     enter-active-class='animate__animated animate__bounce'
     leave-active-class = 'animate__animated animate__backOutUp'
     >
 <div class="box" v-show='isShow'></div>
 </transition>

2.監聽

-淺監聽

主要監聽基本資料型別

監聽的是在data中宣告的變數,而且監聽的名字不能更改

//淺監聽:只能監聽基礎資料型別

name(newVal, oldVal) {
 console.log(newVal, oldVal)
 },

-深監聽

//監聽引用資料型別用深監聽只能獲取最新的資料handler名稱不能換弊端;使用深監聽會引起頁面的卡頓

//非必要情況不要使用,一旦要使用,需要把深監聽轉換為淺監聽

obj: {
     handler(a) {
     console.log(a)
     },
 deep: true
 },
```

百度搜索案例:

1.原生js案例

<!--  // 跨域;協議,域名,埠號只要有一個不一樣就會出現跨域  jsonp解決
    // jsonp原理:動態建立script標籤,利用src屬性進行跨域
    // 1.動態建立script標籤
    // 2.給src賦值
    // 3.得到資料渲染頁面
    // 4.回撥函式(請求回來的資料)
    // http://suggestion.baidu.com/su?cb=aa&wd=%27abc%E2%80%99 -->
<script>
    // 1.獲取元素
    var oInp = document.querySelector('input')
    var oUl = document.querySelector('ul')

    oInp.oninput = function(a){
        console.log(a)
        // 1.動態建立script標籤
        var os = document.createElement('script');
        // 2.賦值src
        os.src = 'http://suggestion.baidu.com/su?cb=aa&wd='+this.value
        // 3.新增到頁面
        document.body.appendChild(os)
    }

    // 回撥函式
    function aa(res){
        console.log(res)
        var arr = res.s //請求回來的資料
        // 清空上次請求回來的資料
        oUl.innerHTML = ''
        for(var i =0;i<arr.length;i++){
            // 動態建立li
            var oLi = document.createElement('li');
            // 給li新增內容
            oLi.innerHTML = arr[i]
            oUl.appendChild(oLi)
        }
    }
</script>

 2、vue案例

<script>
    // http://suggestion.baidu.com/su?cb=aa&wd=%27abc%E2%80%99
    let vm = new Vue({
        el: '#app',
        data: {
            search: '',
            arr:[],//這是用來儲存請求回來的資料
        },
        methods: {

        },
        watch: {
            search() {
                // 1.動態建立script標籤
                var os = document.createElement('script');
                // 2.賦值src
                os.src = 'http://suggestion.baidu.com/su?cb=aa&wd=' + this.search
                // 3.新增到頁面
                document.body.appendChild(os)
            }
        }
    })

// 定義回撥函式
function aa(res){
    console.log(res)
    vm.arr = res.s
}
</script>

  

3.過濾器filter

全域性過濾器vue例項的外部定義Vue.filter(過濾器名稱,回撥函式)

區域性過濾器vue例項中增加配置項filters過濾器名稱:function(){過濾操作}

過濾手機號碼
<div id="app">
        <!-- | 叫做管道符  管道符前面是需要過來的屬性,過濾器後面是過濾器名稱-->
      {{tel | filterTel}}
      <!-- 下面的是錯誤的,因為是區域性定義的過濾器 -->
      {{tel | filTel}} 
    </div>
    <script>
    // 全域性過濾器  Vue.filter(過濾器名稱,回撥函式)
Vue.filter('filterTel',(tel)=>{
    return tel.slice(0,3)+'****'+tel.slice(7)
})

    let vm = new Vue({
        el: '#app',
        data: {
          tel:'15858589958'
        },
        methods: {

        },
        
    })</script>
```

  

過濾價格
<div id="app">
       價格:{{price | filterPrice}}
    </div>
    <script>


// 全域性過濾器  Vue.filter(過濾器名稱,回撥函式)
Vue.filter('filterPrice',(price)=>{
    return price.toFixed(2)
})
    let vm = new Vue({
        el: '#app',
        data: {
          price:29
        },
        methods: {


        },


        
    })
   
// filter: 全域性過濾器  vue例項的外部定義 Vue.filter(過濾器名稱,回撥函式)
//         區域性過濾器  vue例項中增加配置項filters  過濾器名稱:function(){過濾操作}
</script>
```

過濾時間
<script>
<div id="app">
      時間:{{time | filterPrice}}
    </div>
// 全域性過濾器  Vue.filter(過濾器名稱,回撥函式)
Vue.filter('filterPrice',(time)=>{
    // 獲取當前時間
    let data = new Date(time)
    // 年
    let year = data.getFullYear();
    // 月
    let month= (data.getMonth()+1+'').padStart(2,'0');
    // 日
    let day = (data.getDate()+'').padStart(2,'0')
    // 時
    let hours = data.getHours()
    //分
    let min= data.getMinutes()
    // 秒
    let sec = data.getSeconds() 
    return `${year}-${month}-${day} ${hours}:${min}:${sec}`
})
    let vm = new Vue({
        el: '#app',
        data: {
            // new Date().getTime()  獲取當前時間戳
          time:1609917028669
        },
        methods: {
        },

    })
   
// filter: 全域性過濾器  vue例項的外部定義 Vue.filter(過濾器名稱,回撥函式)
//         區域性過濾器  vue例項中增加配置項filters  過濾器名稱:function(){過濾操作}
</script>
```

  

4.計算屬性:通過計算得出來的屬性叫做計算屬性