如何分析JS函數(shù)的防抖和節(jié)流,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
成都創(chuàng)新互聯(lián)"三網(wǎng)合一"的企業(yè)建站思路。企業(yè)可建設(shè)擁有電腦版、微信版、手機(jī)版的企業(yè)網(wǎng)站。實(shí)現(xiàn)跨屏營(yíng)銷(xiāo),產(chǎn)品發(fā)布一步更新,電腦網(wǎng)絡(luò)+移動(dòng)網(wǎng)絡(luò)一網(wǎng)打盡,滿足企業(yè)的營(yíng)銷(xiāo)需求!成都創(chuàng)新互聯(lián)具備承接各種類(lèi)型的網(wǎng)站建設(shè)、網(wǎng)站制作項(xiàng)目的能力。經(jīng)過(guò)十年的努力的開(kāi)拓,為不同行業(yè)的企事業(yè)單位提供了優(yōu)質(zhì)的服務(wù),并獲得了客戶的一致好評(píng)。節(jié)流實(shí)質(zhì)上是:如果你持續(xù)觸發(fā)事件,每隔一段時(shí)間,只執(zhí)行一次事件。
根據(jù)這個(gè)需求我們可以通過(guò)時(shí)間戳實(shí)現(xiàn)節(jié)流:
//第一個(gè)實(shí)現(xiàn)方式function throttle(func, wait) {
var context, args;
var previous = 0;
return function() {
var now = +new Date();
context = this;
args = arguments;
if (now - previous > wait) {
func.apply(context, args);
previous = now;
}
}}//另外補(bǔ)充一下獲取時(shí)間戳的方式吧// new Date().getTime()// Date.parse(new Date())// +new Date()// Date.now()// 通過(guò)判斷再次點(diǎn)擊時(shí)間與上次點(diǎn)擊時(shí)間的時(shí)間戳是否大于傳入的時(shí)間,來(lái)判斷函數(shù)是否被執(zhí)行
另一種實(shí)現(xiàn)方式通過(guò)定時(shí)器,通過(guò)判斷定時(shí)器的存在來(lái)決定函數(shù)是否被執(zhí)行
// 第二種實(shí)現(xiàn)方式function throttle(func, wait) {
var timeout;
var previous = 0;
return function() {
context = this;
args = arguments;
if (!timeout) {
timeout = setTimeout(function(){
timeout = null;
func.apply(context, args)
}, wait)
}
}}//
看上面兩種實(shí)現(xiàn)方式的代碼,比較可以發(fā)現(xiàn):
方式一的事件會(huì)立刻執(zhí)行,因?yàn)楂@取當(dāng)前時(shí)間戳肯定會(huì)大于wait傳入的時(shí)間,方式二事件會(huì)在 n 秒后第一次執(zhí)行,因?yàn)樵O(shè)置了定時(shí)器,所以會(huì)在wait秒之后執(zhí)行。
如果我們連續(xù)執(zhí)行了幾次,第一種方式會(huì)在事件結(jié)束之后不會(huì)再執(zhí)行函數(shù),第二種會(huì)在結(jié)束之后wait秒之后再執(zhí)行一次。
怎么中和實(shí)現(xiàn)一下兩種方式呢?
// 第三種方式function throttle(func, wait, options) {
var timeout, context, args, result;
var previous = 0;
if (!options) options = {};
var later = function() {
previous = options.leading === false ? 0 : new Date().getTime();
timeout = null;
func.apply(context, args);
if (!timeout) context = args = null;
};
var throttled = function() {
var now = new Date().getTime();
if (!previous && options.leading === false) previous = now;
var remaining = wait - (now - previous);
context = this;
args = arguments;
if (remaining <= 0 || remaining > wait) {
if (timeout) {
clearTimeout(timeout);
timeout = null;
}
previous = now;
func.apply(context, args);
if (!timeout) context = args = null;
} else if (!timeout && options.trailing !== false) {
timeout = setTimeout(later, remaining);
}
};
return throttled;}
//leading:false 表示禁用第一次執(zhí)行
//trailing: false 表示禁用停止觸發(fā)的回調(diào)
//那就是 leading:false 和 trailing: false 不能同時(shí)設(shè)置。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。
網(wǎng)頁(yè)標(biāo)題:如何分析JS函數(shù)的防抖和節(jié)流-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://vcdvsql.cn/article34/djhise.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、定制開(kāi)發(fā)、網(wǎng)站排名、響應(yīng)式網(wǎng)站、品牌網(wǎng)站制作、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容