input輸入節流


<template>
  <div>
      <div class="throttle">
          <div>輸入框節流:</div>
          <input type="text" v-model="throttleTxt" placeholder="input輸入框節流">
      </div>
      <div>{{throttleText}}</div>
  </div>
</template>

<script>
    export default {
        data(){
            return {
                throttleTxt:'',
                throttleText:''
            }
        },
        watch: {
            throttleTxt(newTxt){
                this.throttle(this.allQueryData, null, 500, newTxt);
            }
        },
        methods: {
            throttle(fn,context,delay,text){
                clearTimeout(fn.timer);
                fn.timer=setTimeout(() => {
                    fn.call(context,text);
                },delay);
            },
            allQueryData(text){
                this.throttleText = text
                if(text){
                    console.log('text',text)
                }else{
                    console.log('input為空')
                }
            },
        }
    }
</script>

 

js節流

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <input id="search" type="text" name="search">
    
    <script>
        function queryData(text){
            console.log("搜索:" + text);
        }

        var input = document.getElementById("search");
        
        input.addEventListener("input", function(event){
            throttle(queryData, this.value);
        });
        
        function throttle(fn, text, delay = 500, mustApplyTime = 3000, context = null){
            clearTimeout(fn.timer);
            fn._cur = Date.now();  //記錄當前時間
            
            if (!fn._start){      //若該函數是第一次調用,則直接設置_start,即開始時間,為_cur,即此刻的時間
                fn._start = fn._cur;
            }
            if (fn._cur-fn._start > mustApplyTime){
                //當前時間與上一次函數被執行的時間作差,與mustApplyTime比較,若大於,則必須執行一次函數,若小於,則重新設置計時器
                fn.call(context, text);
                fn._start = fn._cur;
            } else {
                fn.timer = setTimeout(function(){
                    fn.call(context,text);
                }, delay);
            }
        }
    </script>
</body>
</html>

 


免責聲明!

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



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