uniapp項(xiàng)目使用防抖及節(jié)流的方案實(shí)戰(zhàn)
此方案出現(xiàn)的理由
- 小程序中無法使用vue.directive的指令方法函數(shù)實(shí)現(xiàn)防抖節(jié)流
- 傳統(tǒng)的防抖節(jié)流方式相對(duì)繁瑣
實(shí)現(xiàn)方案及效果
- 新建一個(gè)debounce-view組件
- 直接用debounce-view包裹需要防抖的內(nèi)容即可,如下:
<debounce-view @thTap="buyNow">
<view class="buy-now">立即購買</view>
</debounce-view>防抖組件內(nèi)容:
//debounce-view
<template>
<view @click.stop="deTap">
<slot></slot>
</view>
</template>
<script>
function deBounce(fn, delay = 500, immediate) {
let timer = null,
immediateTimer = null;
return function() {
let args = arguments,
context = this;
// 第一次觸發(fā)
if (immediate && !immediateTimer) {
fn.apply(context, args);
//重置首次觸發(fā)標(biāo)識(shí),否則下個(gè)周期執(zhí)行時(shí)會(huì)受干擾
immediateTimer = setTimeout(() => {
immediateTimer = null;
}, delay);
}
// 存在多次執(zhí)行時(shí),重置動(dòng)作需放在timer中執(zhí)行;
if (immediateTimer) clearTimeout(immediateTimer);
if (timer) clearTimeout(timer);
timer = setTimeout(() => {
fn.apply(context, args);
timer = null;
immediateTimer = null;
}, delay);
}
}
export default {
methods: {
deTap: deBounce(function() {
console.log('deTap')
this.$emit('deTap')
}, 500, true),
}
}
</script>
<style>
</style>節(jié)流組件內(nèi)容:
<template>
<view @click.stop="thTap">
<slot></slot>
</view>
</template>
<script>
// 第二版
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)
}
}
}
export default {
methods: {
thTap: throttle(function() {
this.$emit('thTap')
}, 500)
}
}
</script>
<style>
</style>總結(jié)
- 上述方法有有點(diǎn)但也有缺點(diǎn),優(yōu)點(diǎn)是使用起來非常的快捷方便,缺點(diǎn)是時(shí)間目前是寫死的,各位看官如果有新的想法或者意見還請(qǐng)指教小弟一二
到此這篇關(guān)于uniapp項(xiàng)目使用防抖及節(jié)流的文章就介紹到這了,更多相關(guān)uniapp使用防抖及節(jié)流內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS實(shí)現(xiàn)線性表的順序表示方法示例【經(jīng)典數(shù)據(jù)結(jié)構(gòu)】
這篇文章主要介紹了JS實(shí)現(xiàn)線性表的順序表示方法,簡(jiǎn)單分析了線性表的原理并結(jié)合實(shí)例形式給出了線性表的插入與刪除實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-04-04
javascript 從if else 到 switch case 再到抽象
大家覺得在接手遺留代碼時(shí),見到什么東東是最讓人感到不耐煩的?復(fù)雜無比的 UML ?我覺得不是。2010-07-07
javascript中不易分清的slice,splice和split三個(gè)函數(shù)
這篇文章主要為大家詳細(xì)介紹了javascript中不易分清的slice,splice和split三個(gè)函數(shù),感興趣的小伙伴們可以參考一下2016-03-03
20分鐘成功編寫bootstrap響應(yīng)式頁面 就這么簡(jiǎn)單
這篇文章主要教大家如何在20分鐘內(nèi)成功編寫bootstrap響應(yīng)式頁面,其實(shí)很簡(jiǎn)單,培養(yǎng)大家分分鐘開發(fā)出一個(gè)高大上的頁面能力,感興趣的小伙伴們可以參考一下2016-05-05
將form表單中的元素轉(zhuǎn)換成對(duì)象的方法適用表單提交
這篇文章主要介紹了如何將form表單中的元素轉(zhuǎn)換成對(duì)象,需要的朋友可以參考下2014-05-05
詳解JavaScript前端如何實(shí)現(xiàn)截屏功能
這篇文章主要為大家詳細(xì)介紹了JavaScript前端如何實(shí)現(xiàn)截屏功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04
Javascript 繼承機(jī)制的實(shí)現(xiàn)
要用ECMAScript實(shí)現(xiàn)繼承機(jī)制,首先從基類入手。所有開發(fā)者定義的類都可作為基類。出于安全原因,本地類和宿主類不能作為基類,這樣可以防止公用訪問編譯過的瀏覽器級(jí)的代碼,因?yàn)檫@些代碼可以被用于惡意攻擊。2009-08-08
JavaScript數(shù)據(jù)結(jié)構(gòu)之鏈表各種操作詳解
數(shù)據(jù)結(jié)構(gòu)是一種有效處理大量數(shù)據(jù)的手段,了解它的結(jié)構(gòu)和組成為我們提供了更有效的工具來設(shè)計(jì)與某些問題相關(guān)的產(chǎn)品。這次我們將進(jìn)行鏈表介紹,回顧它的特點(diǎn)和用途2022-10-10
維護(hù)loading加載狀態(tài)的幾個(gè)方法小結(jié)
在項(xiàng)目開發(fā)中,當(dāng)頁面請(qǐng)求接口時(shí),組件局部或者頁面全局顯示loading加載遮罩可謂是司空見慣了,下面來討論一下如何優(yōu)雅的使用loading狀態(tài),文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09

