最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

老生常談Javascript的防抖和節(jié)流

 更新時(shí)間:2022年02月11日 11:26:27   作者:執(zhí)手天涯@  
這篇文章主要為大家詳細(xì)介紹了Javascript的防抖和節(jié)流,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

1. 什么是防抖

【解釋】: 防抖策略(debounce)是當(dāng)事件被觸發(fā)后,延遲 n 秒后再執(zhí)行回調(diào),如果在這 n 秒內(nèi)事件又被觸發(fā),則重新計(jì)時(shí)。

【圖解】:

在這里插入圖片描述

【作用】:

當(dāng)用戶(hù)頻繁觸發(fā)該事件的時(shí)候,確保只進(jìn)行最后一次的請(qǐng)求操作,節(jié)約請(qǐng)求的資源

【實(shí)現(xiàn)輸入框的防抖】:

var timer = null                    // 1. 防抖動(dòng)的 timer
 function debounceSearch(keywords) { // 2. 定義防抖的函數(shù)
    timer = setTimeout(function() {
    // 發(fā)起 JSONP 請(qǐng)求
    getSuggestList(keywords)
    }, 500)
 }
 $('#ipt').on('keyup', function() {  // 3. 在觸發(fā) keyup 事件時(shí),立即清空 timer
    clearTimeout(timer)
    // ...省略其他代碼
    debounceSearch(keywords)
 })

【實(shí)現(xiàn)建議框緩存】:

定義全局緩存對(duì)象

  // 緩存對(duì)象
  var cacheObj = {}

將搜索結(jié)果保存到緩存對(duì)象中

 // 渲染建議列表
 function renderSuggestList(res) {
    // ...省略其他代碼
   // 將搜索的結(jié)果,添加到緩存對(duì)象中
    var k = $('#ipt').val().trim()
    cacheObj[k] = res
 }

優(yōu)先從緩存中獲取搜索建議

 // 監(jiān)聽(tīng)文本框的 keyup 事件
 $('#ipt').on('keyup', function() {
    // ...省略其他代碼
    // 優(yōu)先從緩存中獲取搜索建議
    if (cacheObj[keywords]) {
       return renderSuggestList(cacheObj[keywords])
    }
    // 獲取搜索建議列表
    debounceSearch(keywords)
  })

2、什么是節(jié)流

【解釋】: 減少一段時(shí)間內(nèi)事件的觸發(fā)頻率。也叫節(jié)流策略。

【圖解】:

在這里插入圖片描述

【應(yīng)用】

  • 鼠標(biāo)連續(xù)不斷地觸發(fā)某事件(如點(diǎn)擊),只在單位時(shí)間內(nèi)只觸發(fā)一次;
  • 懶加載時(shí)要監(jiān)聽(tīng)計(jì)算滾動(dòng)條的位置,但不必每次滑動(dòng)都觸發(fā),可以降低計(jì)算的頻率,而不必去浪費(fèi) CPU 資源;

【鼠標(biāo)跟隨案例】:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="./lib/jquery.js"></script>
  <style>
    html,
    body {
      margin: 0;
      padding: 0;
      overflow: hidden;
    }
    #angel {
      position: absolute;
    }
  </style>
</head>
<body>
  <img src="./angel.gif" alt="" id="angel" />
  <script>
    $(function () {
      // 獲取圖片元素
      var angel = $('#angel')
      // 綁定鼠標(biāo)移動(dòng)事件
      $(document).on('mousemove', function (e) {
        // 獲取鼠標(biāo)到x和y軸的距離設(shè)置給圖片的高和左
        $(angel).css('top', e.pageY-40 + 'px').css('left', e.pageX-40 + 'px')
      })
    })
  </script>
</body>
</html>

3、節(jié)流閥

【解釋】:

  • 節(jié)流閥為空,表示可以執(zhí)行下次操作;不為空,表示不能執(zhí)行下次操作。
  • 當(dāng)前操作執(zhí)行完,必須將節(jié)流閥重置為空,表示可以執(zhí)行下次操作了。
  • 每次執(zhí)行操作前,必須先判斷節(jié)流閥是否為空。

【使用節(jié)流優(yōu)化】:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="./lib/jquery.js"></script>
  <style>
    html,
    body {
      margin: 0;
      padding: 0;
      overflow: hidden;
    }
    #angel {
      position: absolute;
    }
  </style>
</head>
<body>
  <img src="./angel.gif" alt="" id="angel" />
  <script>
    $(function () {
      // 定義一個(gè)節(jié)流閥
      var timer = null;
      // 獲取圖片元素
      var angel = $('#angel')
      // 綁定鼠標(biāo)移動(dòng)事件
      $(document).on('mousemove', function (e) {
        // 判斷節(jié)流閥是否為空
        if (timer) return
        // 控制節(jié)流閥的時(shí)間
        timer = setTimeout(function () {
          // 獲取鼠標(biāo)到x和y軸的距離設(shè)置給圖片的高和左
          $(angel).css('top', e.pageY - 40 + 'px').css('left', e.pageX - 40 + 'px')
          // 清空節(jié)流閥
          timer = null
        }, 100)
      })
    })
  </script>
</body>
</html>

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!   

相關(guān)文章

  • JavaScript函數(shù)模式詳解

    JavaScript函數(shù)模式詳解

    文章對(duì)javascript的四種函數(shù)模式進(jìn)行了詳細(xì)的解釋?zhuān)⒏缴鲜纠?,方便小伙伴們理解并?yīng)用,希望對(duì)大家能有所幫助。
    2014-11-11
  • 在Javascript中處理數(shù)組之toSource()方法的使用

    在Javascript中處理數(shù)組之toSource()方法的使用

    這篇文章主要介紹了在Javascript中處理數(shù)組之toSource()方法的使用,是JS入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-06-06
  • javascript的數(shù)組方法大全

    javascript的數(shù)組方法大全

    這篇文章主要為大家介紹了javascript的數(shù)組方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • JavaScript表達(dá)式:URL 協(xié)議介紹

    JavaScript表達(dá)式:URL 協(xié)議介紹

    javascript:后面可以是表達(dá)式或者使用分號(hào)分隔的表達(dá)式集合如javascript: 5 + 4,感興趣的朋友可以參考下或許可以幫助到你
    2013-03-03
  • js中 關(guān)于undefined和null的區(qū)別介紹

    js中 關(guān)于undefined和null的區(qū)別介紹

    本篇文章小編將為大家介紹,js中 關(guān)于undefined和null的區(qū)別,有需要的朋友可以參考一下
    2013-04-04
  • PHP守護(hù)進(jìn)程實(shí)例

    PHP守護(hù)進(jìn)程實(shí)例

    這篇文章主要介紹了PHP守護(hù)進(jìn)程實(shí)例,php也是可以直接進(jìn)行守護(hù)進(jìn)程的啟動(dòng)與終止的,相對(duì)于shell來(lái)說(shuō)會(huì)簡(jiǎn)單很多,需要的朋友可以參考下
    2015-03-03
  • JavaScript方法和技巧大全

    JavaScript方法和技巧大全

    JavaScript方法和技巧大全...
    2006-12-12
  • 好好了解一下Cookie(強(qiáng)烈推薦)

    好好了解一下Cookie(強(qiáng)烈推薦)

    Cookie是由服務(wù)器端生成,發(fā)送給User-Agent,瀏覽器會(huì)將Cookie的key/value保存到某個(gè)目錄下的文本文件內(nèi),下次請(qǐng)求同一網(wǎng)站時(shí)就發(fā)送該Cookie給服務(wù)器,對(duì)cookie知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2016-06-06
  • 理解和運(yùn)用JavaScript的閉包機(jī)制

    理解和運(yùn)用JavaScript的閉包機(jī)制

    這篇文章主要介紹了理解和運(yùn)用JavaScript的閉包機(jī)制,是JavaScript入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • JavaScript 學(xué)習(xí)筆記之基礎(chǔ)中的基礎(chǔ)

    JavaScript 學(xué)習(xí)筆記之基礎(chǔ)中的基礎(chǔ)

    這篇文章主要介紹了JavaScript 學(xué)習(xí)筆記系列的第一篇文章,跟所有開(kāi)篇一樣,本文我們介紹的都是些基礎(chǔ)中的基礎(chǔ)知識(shí),雖然都是基礎(chǔ),但建議大家不要略過(guò)此文
    2015-01-01

最新評(píng)論

宝清县| 瓦房店市| 高州市| 靖安县| 阜新| 新蔡县| 来宾市| 仲巴县| 顺平县| 东乡| 高邑县| 柘荣县| 莱州市| 沈阳市| 万安县| 星子县| 舒城县| 舒城县| 宜兴市| 兴仁县| 卢氏县| 岑溪市| 磐石市| 福清市| 綦江县| 和平区| 万载县| 资兴市| 蕲春县| 宜兰市| 资兴市| 栾川县| 青铜峡市| 贵州省| 南昌市| 阿尔山市| 文安县| 崇文区| 新巴尔虎右旗| 海淀区| 峨边|