目錄
一、函數(shù)防抖(debounce)
1. 什么是防抖?
二.、函數(shù)節(jié)流
2.1 定時器實(shí)現(xiàn)
2.2 時間戳實(shí)現(xiàn)
2.3 時間戳+定時器
最后
一、函數(shù)防抖(debounce)
1. 什么是防抖?
函數(shù)防抖
:在頻繁觸發(fā)某一個事件時,一段時間內(nèi)不再觸發(fā)該事件后才會去調(diào)用對應(yīng)的回調(diào)函數(shù),在設(shè)定間隔時間內(nèi)如果下一次事件被觸發(fā), 那么就重新開始定時器,直到事件觸發(fā)結(jié)束。
規(guī)定時間內(nèi)沒有繼續(xù)觸發(fā)事件的前提下,再去調(diào)用事件處理函數(shù);
具體如下面的例子所示:
-
-
-
-
-
function debounce(func,delay) {
-
-
return function (...args) {
-
-
if(timer !== null) clearTimeout(timer)
-
timer = setTimeout(func, delay)
-
-
-
-
-
-
console.log('你看我執(zhí)行了幾次??')
-
-
-
-
const temp = debounce(testDeBounce(),1000)
-
-
-
window.addEventListener('scroll',()=>{
-
-
-
window.addEventListener('scroll', testDeBounce);
-
總結(jié)一下思路
:
1.定義一個節(jié)流函數(shù)
2.函數(shù)內(nèi)部使用一個變量保存定時器
3.返回一個函數(shù),函數(shù)內(nèi)部定義:如果定時器已經(jīng)存在就清除定時器,重新設(shè)置定時器
4.定義一個變量來接收debounce返回的函數(shù)
5.在事件的回調(diào)函數(shù)中直接調(diào)用上一步的變量接收的方法
二.、函數(shù)節(jié)流
函數(shù)節(jié)流
:在事件持續(xù)觸發(fā)的前提下,保證一定時間段內(nèi)只調(diào)用一次事件處理函數(shù),就是函數(shù)節(jié)流;
函數(shù)節(jié)流實(shí)現(xiàn)的方式
:定時器、時間戳、定時器+時間戳;
2.1 定時器實(shí)現(xiàn)
思路
:
1.定義節(jié)流函數(shù)throttle
2.定義timer保存定時器
3.返回一個函數(shù)。函數(shù)內(nèi)部定義:如果定時器不存在,設(shè)置定時器,間隔某一時間后將timer設(shè)置為null,如果在這之前事件再次觸發(fā),則定時器中的回調(diào)無效
<button>這是一個孤獨(dú)的按鈕</button>
-
-
-
-
-
-
function throttle(func,delay) {
-
-
-
return function(...args){
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
const temp = throttle(test,1000)
-
-
document.querySelector('button').addEventListener('click',()=>{
-
-
2.2 時間戳實(shí)現(xiàn)
-
var throttle = function(func, delay) {
-
-
-
-
-
-
if (now - prev >= delay) {
-
func.apply(context, args);
-
-
-
-
-
-
-
console.log(Math.random());
-
-
-
window.addEventListener('scroll', throttle(handle, 1000));
2.3 時間戳+定時器
-
-
var throttle = function(func, delay) {
-
-
var startTime = Date.now();
-
-
var curTime = Date.now();
-
var remaining = delay - (curTime - startTime);
-
-
-
-
-
func.apply(context, args);
-
-
-
timer = setTimeout(func, remaining);
-
-
-
-
-
-
console.log(Math.random());
-
-
-
window.addEventListener('scroll', throttle(handle, 1000));
最后
想跟博主交朋友的可以查找,公_號?:前端老實(shí)人,跟博主一起探討學(xué)習(xí)哦?
藍(lán)藍(lán)設(shè)計建立了UI設(shè)計分享群,每天會分享國內(nèi)外的一些優(yōu)秀設(shè)計,如果有興趣的話,可以進(jìn)入一起成長學(xué)習(xí),請掃碼藍(lán)小助,報下信息,藍(lán)小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務(wù)合作,也請與我們聯(lián)系。
分享此文一切功德,皆悉回向給文章原作者及眾讀者.
轉(zhuǎn)自:csdn
免責(zé)聲明:藍(lán)藍(lán)設(shè)計尊重原作者,文章的版權(quán)歸原作者。如涉及版權(quán)問題,請及時與我們?nèi)〉寐?lián)系,我們立即更正或刪除。
藍(lán)藍(lán)設(shè)計( www.z1277.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)