您好,登錄后才能下訂單哦!
這篇“JavaScript防抖和節流函數代碼怎么寫”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“JavaScript防抖和節流函數代碼怎么寫”文章吧。
首先介紹一個防抖的應用場景。假如需要監聽一個輸入框在輸入文字后觸發的change
事件,那么通過keyup
事件,每次輸入文字后都會觸發change
事件,頻繁觸發的情況會影響系統的性能。因此可以使用防抖來降低觸發頻率,即在用戶輸入結束或暫停時,才會觸發change
事件。
<script> const input1 = document.getElementById('input1') // 封裝的防抖函數 function debounce(fn, delay = 500){ let timer = null return function(){ if(timer){ clearTimeout(timer) } timer = setTimeout(()=>{ fn.apply(this, arguments) timer = null }, delay) } } // 調用防抖函數 input1.addEventListener('keyup', debounce(function(){ console.log(input1.value) }, 1000)) </script>
在輸入框中輸入內容后 1s 才會觸發事件監聽里面的打印功能。
與防抖在一段時間之后觸發事件不同,節流會以固定頻率觸發事件。下面介紹一個節流的應用場景,假如在拖拽一個元素時,需要隨時拿到該元素當前被拖拽到的位置,如果直接使用drag
事件,那么會頻繁觸發該事件,很容易卡頓。此時可以使用節流,即無論拖拽速度有多快,都可以設置固定的頻率觸發。
<body> <div id="div1" draggable="true">可拖拽</div> <script> const div1 = document.getElementById('div1') // 封裝節流函數 function throttle(fn, delay = 500){ let timer = null return function(){ if(timer){ return } timer = setTimeout(()=>{ fn.apply(this, arguments) timer = null }, delay) } } // 在事件監聽里面調用節流函數 div1.addEventListener('drag', throttle(function(e){ console.log(e.offsetX, e.offsetY) }, 1000)) </script> </body>
隨著元素被拖拽,本來應該迅速觸發拖拽事件打印元素的坐標位置,然而使用節流將打印元素位置的函數封裝之后,就會以每隔1000ms的頻率,打印坐標位置。
以上就是關于“JavaScript防抖和節流函數代碼怎么寫”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。