什麼叫vue防手震

青灯夜游
發布: 2022-07-20 18:46:28
原創
2177 人瀏覽過

在vue中,防手震是指在事件被觸發n秒後再執行回調,如果在這n秒內又被觸發,則重新計時;也就是說:當持續觸發某事件時,當一定時間間隔內沒有再觸發事件時,事件處理函數才會執行一次,如果設定的時間間隔到來之前,又一次觸發了事件,就重新開始延時。

什麼叫vue防手震

本教學操作環境:windows7系統、vue3版,DELL G3電腦。

談到vue專案的最佳化,防抖節流真心需要了解一下,以下就來聊聊防手震。

防手震(debounce)

#在事件觸發n秒後再執行回調,如果在這n秒內又被觸發,則重新計時;

解釋:當持續觸發某事件時,一定時間間隔內沒有再觸發事件時,事件處理函數才會執行一次,如果設定的時間間隔到來之前,又一次觸發了事件,就重新開始延時。

通俗理解,就是我們在點擊請求或點擊載入等過程中,只需要點擊一次,但由於請求慢,點擊了好多次,導致多次請求,防手震就是在點擊了好多次之後的最後一次才會請求。

案例1:

持續觸發scroll事件時,並不會立即執行handle函數,當1000毫秒內沒有觸發scroll事件時,才會延遲觸發一次handle函數。

function debounce(fn, wait) {
 let timeout = null
 return function() {
  if(timeout !== null) clearTimeout(timeout)   
  timeout = setTimeout(fn, wait);
 }
}
function handle() {  
 console.log(Math.random())
}
window.addEventListener('scroll', debounce(handle, 1000))
登入後複製

addEventListener的第二個參數其實是debounce函數裡return回的方法,let timeout = null 這行程式碼只在addEventListener的時候執行了一次觸發事件的時候不會執行,那麼每次觸發scroll事件的時候都會清除上次的延時器同時記錄一個新的延時器,當scroll事件停止觸發後最後一次記錄的延時器不會被清除可以延時執行,這是debounce函數的原理

案例2:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>防抖</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        输入内容:<input type="text"  @keyup="deb"/>
        <div> 输入次数:{{num}}</div>
    </div>
    <script>
        let time
        var app=new Vue({
            el:&#39;#app&#39;,
            data:{
                num:0,
            },
            methods:{
                deb: function () {
let that = this
if (time) {
clearTimeout(time)
}
time = setTimeout(function () {
                            that.num++
console.log(&#39;输入了&#39;+that.num+&#39;次&#39;)
time = undefined;
}, 2000)
}
            }
        })
    </script>
</body>
</html>
登入後複製

效果圖:(輸入一次文字2秒後執行,多次輸入,還是執行一次,輸入次數只加1):

     全域定義的time是undefind , 在連續輸入的過程中,多次觸發keyup事件,定時器每次都會重新渲染,僅當輸入間隔超過(或等於)所設時間2秒時,num才會執行。

什麼叫vue防手震

搭配鍵盤修飾符:(.enter為例)

    <div id="app">
        输入内容:<input type="text" class="input"  @keyup.enter="deb"/>
        <div> 输入次数:{{num}}</div>
    </div>
登入後複製

這樣連續按回車後,也只會觸發一次輸入,每次按回車間隔設定的兩秒,才會觸發一次。

所以,考慮到會出現連續點擊了提交按鈕,連續觸摸的情況,防抖是必要的。

當然,也有另外的解決方式,例如專案裡用的是控制按鈕的方式,點擊儲存,在請求介面返回200之前,按鈕禁止使用,這裡就不會出現重複點擊了。

【相關影片教學推薦:vue影片教學web前端入門

以上是什麼叫vue防手震的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板