国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

了解防抖和節(jié)流:提升前端交互體驗的實用策略

這篇具有很好參考價值的文章主要介紹了了解防抖和節(jié)流:提升前端交互體驗的實用策略。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

本文將重點介紹前端性能優(yōu)化方法之一的防抖和節(jié)流。首先解釋了它們的概念和原理,然后探討了它們在前端開發(fā)中的應用場景,如輸入框搜索、滾動事件等。最后,通過簡單的代碼示例展示了如何實現(xiàn)防抖和節(jié)流函數。通過學習和應用這兩種技術,我們可以有效地減少不必要的函數執(zhí)行次數,提高頁面響應速度,從而改善用戶體驗。

什么是防抖?

定義:延遲一段時間再觸發(fā),如果再延遲時間內又觸發(fā),則清除上一個定時,再開始新的定時。
應用場景:搜索框聯(lián)想、屏幕伸縮。

什么是節(jié)流?

定義:在一段時間間隔內,稀釋事件的觸發(fā)頻率,不論事件被觸發(fā)幾次,只執(zhí)行一次。
應用場景:
單位時間內,鼠標不論點擊多少次,只執(zhí)行一次(搜索內容未變化時)。
在使用列表下拉滾動加載時,用于定時監(jiān)聽滾動事件。

應用實例

防抖實例

下面是用防抖實現(xiàn)一個簡易版搜索框聯(lián)想+防抖

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <header>
        <h1>防抖解決搜索聯(lián)想詞</h1>
    </header>

    <main>
            <input type="text" id="search-input" placeholder="Search...">
            <ul id="suggestions-list"></ul>
    </main>

    <script>
		// 1.防抖函數
		function debounce(func, delay) {
		  let timer;
		  return function (...args) {
		    clearTimeout(timer);
		    timer = setTimeout(() => {
		      func.apply(this, args);
		    }, delay);
		  };
		}
		// 2.定義兩個變量分別存儲輸入框id和聯(lián)想詞id
		const searchInput = document.getElementById('search-input');
		const suggestionsList = document.getElementById('suggestions-list');
		
		// 3.模擬異步請求獲取聯(lián)想詞
		function fetchSuggestions(keyword) {
		  const suggestions = ['apple', 'banana', 'cherry', 'date', 'elderberry', 'fig'];
		
		  renderSuggestions(suggestions.filter(suggestion =>
		    suggestion.toLowerCase().startsWith(keyword.toLowerCase())
		  ));
		}
		// 4.聯(lián)想詞顯示函數
		function renderSuggestions(suggestions) {
		  suggestionsList.innerHTML = '';
		
		  suggestions.forEach((suggestion) => {
		    const listItem = document.createElement('li');
		    listItem.textContent = suggestion;
		    suggestionsList.appendChild(listItem);
		  });
		}
		// 定義默認方法,調用閉包方法,設置定時時間和防抖結束后調用的函數
		const debounceFetchSuggestions = debounce(fetchSuggestions, 1000);
		// 給輸入框id增加監(jiān)聽器
		searchInput.addEventListener('input', function () {
			// 獲取去空格value值
		  const keyword = searchInput.value.trim();
		  // 調用閉包方法
		  debounceFetchSuggestions(keyword);
		});
	</script>
</body>
</html>

講解代碼
1.在html代碼中寫input、ul,一個用來輸入,一個用來返回聯(lián)想詞,并給它們設置id值用于添加監(jiān)聽以及更新內容。
2.定義防抖函數:debounce
外層兩個參數分別存儲防抖事件處理方法以及延遲毫秒數。
timer用于存儲定時器的引用。內部返回的閉包函數如果在延遲時間內再次被調用,則timer重置,且重新開始計時。
如果延遲時間內沒有再次被調用,則調用func也就是fetchSuggestions函數,這里用到了一個方法apply,該方法有兩個參數,第一個參數決定this指向的是哪個上下文環(huán)境,這里指向的是當前上下文環(huán)境,第二個為普通參數。
3.定義兩個變量searchInput、suggestionsList分別把input和ul的id進行賦值。
4.模仿異步接口寫方法,該方法第一層是定義了所有聯(lián)想詞,第二層是調用聯(lián)想詞顯示函數。這里用到filter過濾和篩選,這里就不贅述了。
5.聯(lián)想詞顯示函數,這里用到的是forEach遍歷,createElement創(chuàng)建HTML元素,以及用li和appendchild加元素。
6.定義默認方法,并且設置事件處理方法和延遲毫秒數。
7.給輸入框加監(jiān)聽器監(jiān)聽器中使用trim去除空格,且調用閉包函數。

節(jié)流實例

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <header>
        <h1>節(jié)流解決搜索聯(lián)想詞</h1>
    </header>

    <main>
		<input type="text" id="searchInput">
    </main>

    <script>
		const searchInput = document.getElementById('searchInput');
		
		function search(query) {
		  // 模擬搜索操作,這里可以替換為實際的搜索邏輯
		  console.log(`搜索: ${query}`);
		}
		
		// 使用節(jié)流函數處理搜索輸入
		const throttleSearch = throttle(search, 1000); // 設定延遲為500毫秒
		
		searchInput.addEventListener('keyup', function(event) {
		  const query = event.target.value.trim();
		  throttleSearch(query);
		});
		
		// 節(jié)流函數實現(xiàn)
		function throttle(func, delay) {
		  let timerId;
		  let lastExecuted = 0;
		
		  return function(...args) {
		    const now = Date.now();
		    const timeSinceLastExecution = now - lastExecuted;
		
		    if (timeSinceLastExecution >= delay) {
		      func.apply(this, args);
		      lastExecuted = now;
		    } else {
		      clearTimeout(timerId);
		      timerId = setTimeout(() => {
		        func.apply(this, args);
		        lastExecuted = Date.now();
		      }, delay - timeSinceLastExecution);
		    }
		  };
		}

	</script>
</body>
</html>

我們首先獲取了搜索框的元素,并定義了一個 search 函數用于模擬搜索操作。然后,我們使用節(jié)流函數 throttle 對搜索函數進行包裝,設定了一個1000毫秒的延遲。
接下來,監(jiān)聽搜索框的 keyup 事件,并獲取用戶輸入的查詢詞。每次鍵盤釋放時,會調用節(jié)流函數 throttleSearch,并將查詢詞作為參數傳遞給搜索函數 search。
在節(jié)流函數的實現(xiàn)中,記錄了最后一次函數執(zhí)行的時間戳,并根據設定的延遲來判斷是否立即執(zhí)行函數或設置定時器延遲執(zhí)行函數。
當用戶在搜索框中輸入內容時,搜索請求會在一定的時間間隔內被觸發(fā),避免了頻繁的搜索請求。文章來源地址http://www.zghlxwxcb.cn/news/detail-754236.html

到了這里,關于了解防抖和節(jié)流:提升前端交互體驗的實用策略的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 防抖和節(jié)流及多種實現(xiàn)方式

    當用戶在網頁中進行操作時,如點擊、滾動、輸入等,往往會頻繁地觸發(fā)事件。如果每個事件都立即執(zhí)行相應的函數,可能會導致性能問題和用戶體驗不佳,因為這些函數可能需要執(zhí)行復雜的操作,如計算、網絡請求等。 為了優(yōu)化這種情況,我們可以使用防抖和節(jié)流來限制函

    2023年04月24日
    瀏覽(20)
  • 節(jié)流防抖:提升前端性能的秘密武器(上)

    節(jié)流防抖:提升前端性能的秘密武器(上)

    ?? 前端開發(fā)工程師(主業(yè))、技術博主(副業(yè))、已過CET6 ?? 阿珊和她的貓_CSDN個人主頁 ?? ??透呒墝n}作者、在??痛蛟旄哔|量專欄《前端面試必備》 ?? 藍橋云課簽約作者、已在藍橋云課上架的前后端實戰(zhàn)課程《Vue.js 和 Egg.js 開發(fā)企業(yè)級健康管理項目》、《帶你從入

    2024年02月04日
    瀏覽(19)
  • 小程序如何使用防抖和節(jié)流?

    防抖(Debounce)和節(jié)流(Throttle)都是用來優(yōu)化函數執(zhí)行頻率的技術,特別在處理用戶輸入、滾動等頻繁觸發(fā)的情況下,它們可以有效減少函數的執(zhí)行次數,從而提升性能和用戶體驗。但它們的工作方式和應用場景有所不同。 防抖的主要思想是,當持續(xù)觸發(fā)事件時,在事件最

    2024年02月13日
    瀏覽(21)
  • axios、跨域與JSONP、防抖和節(jié)流

    axios、跨域與JSONP、防抖和節(jié)流

    Axios 是專注于 網絡數據請求 的庫。 相比于原生的 XMLHttpRequest 對象,axios 簡單易用 。 相比于 jQuery,axios 更加 輕量化 ,只專注于網絡數據請求。 axios.get(\\\'url\\\', { params: { /*參數*/ } }).then(callback) 例如: axios.post(\\\'url\\\', { /*參數*/ }).then(callback) 例如: 例如: 如果兩個頁面的 協(xié)議

    2024年02月08日
    瀏覽(20)
  • Vue - 使用Lodash實現(xiàn)防抖和節(jié)流

    Vue - 使用Lodash實現(xiàn)防抖和節(jié)流

    GitHub Demo 地址 在線預覽 Lodash 官網 更新:對應的vue3版的demo如下: GitHub Demo 地址 在線預覽 參考: Vue 防抖節(jié)流 詳細介紹 vue 優(yōu)雅的實現(xiàn)防抖和節(jié)流 防抖、節(jié)流的介紹 js防抖和節(jié)流的實現(xiàn)原理及應用場景 js防抖節(jié)流應用場景及寫法 JS中的防抖 函數節(jié)流(throttle)與 函數防抖(

    2024年02月01日
    瀏覽(26)
  • 防抖和節(jié)流 含義及區(qū)別圖文詳解秒懂

    防抖和節(jié)流 含義及區(qū)別圖文詳解秒懂

    防抖和節(jié)流都是為解決短時間內頻繁觸發(fā)某個功能函數而導致的性能問題。比如,觸發(fā)頻率過高而導致響應速度跟不上,以致出現(xiàn)延遲,假死或卡頓的現(xiàn)象。? 圖解:一件事情,計劃5s以后觸發(fā),結果中途意外觸發(fā)了,那么就重新從0開始5秒的計時,這就導致本身計劃的事情就

    2024年02月06日
    瀏覽(19)
  • 【js】防抖和節(jié)流的使用場景和區(qū)別:

    【js】防抖和節(jié)流的使用場景和區(qū)別:

    一、防抖 (多次觸發(fā) 只執(zhí)行最后一次) 作用: 高頻率觸發(fā)的事件,在指定的單位時間內,只響應最后一次,如果在指定的時間內再次觸發(fā),則重新計算時間 防抖類似于英雄聯(lián)盟回城6秒,如果回城中被打斷,再次回城需要再等6秒 二、節(jié)流 (規(guī)定時間內 只觸發(fā)一次) 作用:

    2024年02月10日
    瀏覽(22)
  • JS手寫防抖和節(jié)流函數(超詳細版整理)

    JS手寫防抖和節(jié)流函數(超詳細版整理)

    防抖(debounce) :每次觸發(fā)定時器后,取消上一個定時器,然后重新觸發(fā)定時器。防抖 一般用于用戶未知行為的優(yōu)化 ,比如搜索框輸入彈窗提示,因為用戶接下來要輸入的內容都是未知的,所以每次用戶輸入就彈窗是沒有意義的,需要等到用戶輸入完畢后再進行彈窗提示。

    2024年02月04日
    瀏覽(20)
  • 前端刷題-防抖節(jié)流

    在實際的開發(fā)過程中,一般會使用lodash自有的debounce函數和throttle函數對所要防抖/節(jié)流的函數進行包裹。例如

    2024年02月10日
    瀏覽(18)
  • 前端優(yōu)化 ----防抖 節(jié)流

    如果一個事件在短時間內連續(xù)觸發(fā),則只去執(zhí)行最后一次。 控制頻率 實現(xiàn)方式:每次觸發(fā)事件時設置一個延遲調用方法,并且取消之前的延時調用方法 缺點:如果事件在規(guī)定的時間間隔內被不斷的觸發(fā),則調用方法會被不斷的延遲 使一個函數在固定時間內只執(zhí)行一次??刂?/p>

    2024年02月04日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包