溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JavaScript防抖和節(jié)流函數(shù)代碼怎么寫

發(fā)布時間:2023-02-25 10:33:15 來源:億速云 閱讀:105 作者:iii 欄目:開發(fā)技術(shù)

這篇“JavaScript防抖和節(jié)流函數(shù)代碼怎么寫”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“JavaScript防抖和節(jié)流函數(shù)代碼怎么寫”文章吧。

1. 手寫防抖debounce

首先介紹一個防抖的應(yīng)用場景。假如需要監(jiān)聽一個輸入框在輸入文字后觸發(fā)的change事件,那么通過keyup事件,每次輸入文字后都會觸發(fā)change事件,頻繁觸發(fā)的情況會影響系統(tǒng)的性能。因此可以使用防抖來降低觸發(fā)頻率,即在用戶輸入結(jié)束或暫停時,才會觸發(fā)change事件。

<script>
	const input1 = document.getElementById('input1')
	// 封裝的防抖函數(shù)
	function debounce(fn, delay = 500){
	    let timer = null
	    return function(){
	        if(timer){
	            clearTimeout(timer)
	        }
	        timer = setTimeout(()=>{
	            fn.apply(this, arguments)
	            timer = null
	        }, delay)
	    }
	}
	// 調(diào)用防抖函數(shù)
	input1.addEventListener('keyup', debounce(function(){
	    console.log(input1.value)
	}, 1000))
</script>

在輸入框中輸入內(nèi)容后 1s 才會觸發(fā)事件監(jiān)聽里面的打印功能。

JavaScript防抖和節(jié)流函數(shù)代碼怎么寫

2. 手寫節(jié)流throttle

與防抖在一段時間之后觸發(fā)事件不同,節(jié)流會以固定頻率觸發(fā)事件。下面介紹一個節(jié)流的應(yīng)用場景,假如在拖拽一個元素時,需要隨時拿到該元素當前被拖拽到的位置,如果直接使用drag事件,那么會頻繁觸發(fā)該事件,很容易卡頓。此時可以使用節(jié)流,即無論拖拽速度有多快,都可以設(shè)置固定的頻率觸發(fā)。

<body>
    <div id="div1" draggable="true">可拖拽</div>
    <script>
        const div1 = document.getElementById('div1')
        // 封裝節(jié)流函數(shù)
        function throttle(fn, delay = 500){
            let timer = null
            return function(){
                if(timer){
                    return
                }
                timer = setTimeout(()=>{
                    fn.apply(this, arguments)
                    timer = null
                }, delay)
            }
        }
        // 在事件監(jiān)聽里面調(diào)用節(jié)流函數(shù)
        div1.addEventListener('drag', throttle(function(e){
            console.log(e.offsetX, e.offsetY)
        }, 1000))
    </script>
</body>

隨著元素被拖拽,本來應(yīng)該迅速觸發(fā)拖拽事件打印元素的坐標位置,然而使用節(jié)流將打印元素位置的函數(shù)封裝之后,就會以每隔1000ms的頻率,打印坐標位置。

JavaScript防抖和節(jié)流函數(shù)代碼怎么寫

以上就是關(guān)于“JavaScript防抖和節(jié)流函數(shù)代碼怎么寫”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI