工具函數(shù)

業(yè)務(wù)場(chǎng)景:打開(kāi)一個(gè)iframe頁(yè)面,并主動(dòng)觸發(fā)iframe頁(yè)面的某個(gè)元素 的事件铡恕。
存在問(wèn)題:DOM元素要進(jìn)行渲染琢感,代碼執(zhí)行到觸發(fā)元素事件時(shí),元素并未渲染出來(lái)探熔。
解決辦法:寫(xiě)一個(gè)工具函數(shù)驹针,限制時(shí)間(limitTime)內(nèi),有頻率(frequencyTime)的做某個(gè)事情(fn)诀艰,超過(guò)限制時(shí)間(limitTime)柬甥,不做則個(gè)事情fn。如果在某個(gè)頻率(frequencyTime)這個(gè)事情觸發(fā)了其垄,并且返回為true苛蒲。那么就停止做這個(gè)事情(fn)。

/**
 * 
 * @param {*} limitTime  限制時(shí)間
 * @param {*} frequencyTime  頻率時(shí)間
 * @param {*} fn 某個(gè)事情
 * 寫(xiě)一個(gè)工具函數(shù)绿满,限制時(shí)間(limitTime)內(nèi)臂外,有頻率(frequencyTime)的做某個(gè)事情(fn),
 * 超過(guò)限制時(shí)間(limitTime)喇颁,不做則個(gè)事情fn漏健。
 * 如果在某個(gè)頻率(frequencyTime)這個(gè)事情觸發(fā)了,并且返回為true橘霎。那么就停止做這個(gè)事情(fn)
 */
export function limtToolFn(limitTime, frequencyTime, fn) {
  let freTimer = null
  const beginTime = new Date().getTime()
  freTimer = setInterval(() => {
      if (new Date().getTime() - beginTime > limitTime) {
          clearInterval(freTimer)
      } else {
          let res = fn()
          if (res) {
              clearInterval(freTimer)
          }
      }
  }, frequencyTime)
}

節(jié)流

/**
 * 節(jié)流1
 * 首次觸發(fā):事件結(jié)束蔫浆,重新觸發(fā)事件,也會(huì)觸發(fā)姐叁,不需要刷新頁(yè)面
 * 觸發(fā)最后的事件情況如下(比如delay的時(shí)間為5s瓦盛,我們持續(xù)觸發(fā)事件為7.5s,
 * 我們會(huì)觸發(fā)三次(0s 5s 10s) 10s時(shí)觸發(fā)的事件是7.5s時(shí)的事件)
 * @param {*} fn :回調(diào)函數(shù)
 * @param {*} delay :節(jié)流時(shí)間
 * @returns 
 */
const throttle = (fn, delay) => {
    let last = 0;
    let timer = null;

    return function () {
        let context = this
        let arg = arguments
        let now = Date.now();
        let reming = delay - (now - last);
        clearTimeout(timer);
        if (reming < 0) { // 第一次 間歇性 執(zhí)行
            fn.call(context, arg);
            last = now;
        } else { // 最后一次執(zhí)行
            timer = setTimeout(() => {
                fn.call(context, arg);
            }, reming);
        }
    }
}

/**
 * 節(jié)流2
 * 真首次觸發(fā): 頁(yè)面不刷新外潜,真只有一次觸發(fā)谭溉。
 * 觸發(fā)最后的事件情況如下(比如delay的時(shí)間為5s,我們持續(xù)觸發(fā)事件為7.5s橡卤,
 * 我們會(huì)觸發(fā)三次(0s 5s 10s) 10s時(shí)觸發(fā)的事件是5s之后的第一次事件)
 * @param {*} fn 
 * @param {*} delay 
 * @returns 
 */
export const throttle2 = (fn, delay) => {
    let time = -1
    // 第一次立即執(zhí)行
    let isFirst = true
    return function () {
        let context = this
        let arg = arguments
        if (isFirst) {
            isFirst = false
            fn.call(context, arg)
            return
        }
        if (time === -1) {
            time = setTimeout(() => {
                fn.call(context, arg)
                time = -1
            }, delay)
        }
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扮念,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子碧库,更是在濱河造成了極大的恐慌柜与,老刑警劉巖巧勤,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異弄匕,居然都是意外死亡颅悉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)迁匠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)剩瓶,“玉大人,你說(shuō)我怎么就攤上這事城丧⊙邮铮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵亡哄,是天一觀的道長(zhǎng)枝缔。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蚊惯,這世上最難降的妖魔是什么愿卸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮截型,結(jié)果婚禮上趴荸,老公的妹妹穿的比我還像新娘。我一直安慰自己宦焦,他們只是感情好赊舶,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著赶诊,像睡著了一般笼平。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上舔痪,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音锄码,去河邊找鬼夺英。 笑死,一個(gè)胖子當(dāng)著我的面吹牛滋捶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播载萌,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了扭仁?” 一聲冷哼從身側(cè)響起垮衷,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乖坠,沒(méi)想到半個(gè)月后搀突,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡熊泵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年仰迁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片顽分。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡徐许,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出怯邪,到底是詐尸還是另有隱情绊寻,我是刑警寧澤花墩,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布悬秉,位于F島的核電站,受9級(jí)特大地震影響冰蘑,放射性物質(zhì)發(fā)生泄漏和泌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一祠肥、第九天 我趴在偏房一處隱蔽的房頂上張望武氓。 院中可真熱鬧,春花似錦仇箱、人聲如沸县恕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)忠烛。三九已至,卻和暖如春权逗,著一層夾襖步出監(jiān)牢的瞬間美尸,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工斟薇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留师坎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓堪滨,卻偏偏與公主長(zhǎng)得像胯陋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容