摘要:這樣,瘋狂點擊按鈕也只會觸發(fā)一次。出現(xiàn)這種情況的原因是返回的是一個新函數(shù),已經(jīng)不是最初的函數(shù)了。最后的函數(shù)如下返回新的函數(shù)將和參數(shù)傳給原函數(shù)再次點擊按鈕和都有了參考輕松理解函數(shù)節(jié)流和函數(shù)防抖源代碼的頁面
場景
在使用小程序的時候會出現(xiàn)這樣一種情況:當(dāng)網(wǎng)絡(luò)條件差或卡頓的情況下,使用者會認(rèn)為點擊無效而進(jìn)行多次點擊,最后出現(xiàn)多次跳轉(zhuǎn)頁面的情況,就像下圖(快速點擊了兩次):
然后從 輕松理解JS函數(shù)節(jié)流和函數(shù)防抖 中找到了解決辦法,就是函數(shù)節(jié)流(throttle):函數(shù)在一段時間內(nèi)多次觸發(fā)只會執(zhí)行第一次,在這段時間結(jié)束前,不管觸發(fā)多少次也不會執(zhí)行函數(shù)。
/utils/util.js:
function throttle(fn, gapTime) { if (gapTime == null || gapTime == undefined) { gapTime = 1500 } let _lastTime = null return function () { let _nowTime = + new Date() if (_nowTime - _lastTime > gapTime || !_lastTime) { fn() _lastTime = _nowTime } } } module.exports = { throttle: throttle }
/pages/throttle/throttle.wxml:
/pages/throttle/throttle.js
const util = require("../../utils/util.js") Page({ data: { text: "tomfriwel" }, onLoad: function (options) { }, tap: util.throttle(function (e) { console.log(this) console.log(e) console.log((new Date()).getSeconds()) }, 1000) })
這樣,瘋狂點擊按鈕也只會1s觸發(fā)一次。
但是這樣的話出現(xiàn)一個問題,就是當(dāng)你想要獲取this.data得到的this是undefined, 或者想要獲取微信組件button傳遞給點擊函數(shù)的數(shù)據(jù)e也是undefined,所以throttle函數(shù)還需要做一點處理來使其能用在微信小程序的頁面js里。
出現(xiàn)這種情況的原因是throttle返回的是一個新函數(shù),已經(jīng)不是最初的函數(shù)了。新函數(shù)包裹著原函數(shù),所以組件button傳遞的參數(shù)是在新函數(shù)里。所以我們需要把這些參數(shù)傳遞給真正需要執(zhí)行的函數(shù)fn。
最后的throttle函數(shù)如下:
function throttle(fn, gapTime) { if (gapTime == null || gapTime == undefined) { gapTime = 1500 } let _lastTime = null // 返回新的函數(shù) return function () { let _nowTime = + new Date() if (_nowTime - _lastTime > gapTime || !_lastTime) { fn.apply(this, arguments) //將this和參數(shù)傳給原函數(shù) _lastTime = _nowTime } } }
再次點擊按鈕this和e都有了:
輕松理解JS函數(shù)節(jié)流和函數(shù)防抖
源代碼tomfriwel/MyWechatAppDemo 的throttle頁面
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/92799.html
摘要:資料整理關(guān)于配置微信小程序頁面附關(guān)于微信搜索小程序內(nèi)頁面的功能,只能在線上環(huán)境有用,而且沒有提供測試的渠道。二微信小程序激勵視頻廣告接入微信視頻廣告指引截圖具體使用注意激勵視頻廣告組件是一個原生組件,層級比普通組件高。 大綱:根據(jù)近期我在小程序開發(fā)中接到的需求,總結(jié)一下下面四個開發(fā)需求所遇到的問題: 1、關(guān)于微信現(xiàn)已開放小程序內(nèi)搜索(sitemap 配置);2、微信小程序的激勵視頻廣告...
摘要:資料整理關(guān)于配置微信小程序頁面附關(guān)于微信搜索小程序內(nèi)頁面的功能,只能在線上環(huán)境有用,而且沒有提供測試的渠道。二微信小程序激勵視頻廣告接入微信視頻廣告指引截圖具體使用注意激勵視頻廣告組件是一個原生組件,層級比普通組件高。 大綱:根據(jù)近期我在小程序開發(fā)中接到的需求,總結(jié)一下下面四個開發(fā)需求所遇到的問題: 1、關(guān)于微信現(xiàn)已開放小程序內(nèi)搜索(sitemap 配置);2、微信小程序的激勵視頻廣告...
摘要:資料整理關(guān)于配置微信小程序頁面附關(guān)于微信搜索小程序內(nèi)頁面的功能,只能在線上環(huán)境有用,而且沒有提供測試的渠道。二微信小程序激勵視頻廣告接入微信視頻廣告指引截圖具體使用注意激勵視頻廣告組件是一個原生組件,層級比普通組件高。 大綱:根據(jù)近期我在小程序開發(fā)中接到的需求,總結(jié)一下下面四個開發(fā)需求所遇到的問題: 1、關(guān)于微信現(xiàn)已開放小程序內(nèi)搜索(sitemap 配置);2、微信小程序的激勵視頻廣告...
摘要:優(yōu)雅解決微信小程序授權(quán)登錄需要觸發(fā)聊一聊最近的一個項目,這個項目是一個收書售書的小程序,有商城專欄信息發(fā)布論壇等功能。微信不會把的有效期告知開發(fā)者。 優(yōu)雅解決微信小程序授權(quán)登錄需要button觸發(fā) 聊一聊最近的一個項目,這個項目是一個收書、售書的小程序,有商城、專欄、信息發(fā)布論壇等功能。雖然不是面向所有用戶,但要求無論用戶是否授權(quán)都皆可使用,但同時也要求部分功能對不授權(quán)的用戶限制開放。...
摘要:全屏蒙版彈窗遮不住的層級還是很高的,當(dāng)出現(xiàn)全屏蒙版彈窗時,是無法蓋住的,可以調(diào)用微信的,不過需要注意兼容低版本在類設(shè)置的顏色并沒有變化。 從6月份開始到現(xiàn)在,寫小程序?qū)⒔?個月了開發(fā)時給自己埋了不少坑~給大家分享下我的填坑經(jīng)驗~~ 開發(fā)部分 1.小程序的組件修改不能觸發(fā)頁面刷新?需要在父級文件上保存下才會觸發(fā)(使用wepy開發(fā)) 2.接口請求出現(xiàn)的問題?記得勾選調(diào)試開發(fā)工具上 不校驗...
閱讀 2462·2021-11-23 09:51
閱讀 2497·2021-11-11 17:21
閱讀 3138·2021-09-04 16:45
閱讀 2420·2021-08-09 13:42
閱讀 2256·2019-08-29 18:39
閱讀 2918·2019-08-29 14:12
閱讀 1323·2019-08-29 13:49
閱讀 3395·2019-08-29 11:17