摘要:這樣,瘋狂點擊按鈕也只會觸發一次。出現這種情況的原因是返回的是一個新函數,已經不是最初的函數了。最后的函數如下返回新的函數將和參數傳給原函數再次點擊按鈕和都有了參考輕松理解函數節流和函數防抖源代碼的頁面
場景
在使用小程序的時候會出現這樣一種情況:當網絡條件差或卡頓的情況下,使用者會認為點擊無效而進行多次點擊,最后出現多次跳轉頁面的情況,就像下圖(快速點擊了兩次):
然后從 輕松理解JS函數節流和函數防抖 中找到了解決辦法,就是函數節流(throttle):函數在一段時間內多次觸發只會執行第一次,在這段時間結束前,不管觸發多少次也不會執行函數。
/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觸發一次。
但是這樣的話出現一個問題,就是當你想要獲取this.data得到的this是undefined, 或者想要獲取微信組件button傳遞給點擊函數的數據e也是undefined,所以throttle函數還需要做一點處理來使其能用在微信小程序的頁面js里。
出現這種情況的原因是throttle返回的是一個新函數,已經不是最初的函數了。新函數包裹著原函數,所以組件button傳遞的參數是在新函數里。所以我們需要把這些參數傳遞給真正需要執行的函數fn。
最后的throttle函數如下:
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.apply(this, arguments) //將this和參數傳給原函數 _lastTime = _nowTime } } }
再次點擊按鈕this和e都有了:
輕松理解JS函數節流和函數防抖
源代碼tomfriwel/MyWechatAppDemo 的throttle頁面
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/92799.html
摘要:資料整理關于配置微信小程序頁面附關于微信搜索小程序內頁面的功能,只能在線上環境有用,而且沒有提供測試的渠道。二微信小程序激勵視頻廣告接入微信視頻廣告指引截圖具體使用注意激勵視頻廣告組件是一個原生組件,層級比普通組件高。 大綱:根據近期我在小程序開發中接到的需求,總結一下下面四個開發需求所遇到的問題: 1、關于微信現已開放小程序內搜索(sitemap 配置);2、微信小程序的激勵視頻廣告...
摘要:資料整理關于配置微信小程序頁面附關于微信搜索小程序內頁面的功能,只能在線上環境有用,而且沒有提供測試的渠道。二微信小程序激勵視頻廣告接入微信視頻廣告指引截圖具體使用注意激勵視頻廣告組件是一個原生組件,層級比普通組件高。 大綱:根據近期我在小程序開發中接到的需求,總結一下下面四個開發需求所遇到的問題: 1、關于微信現已開放小程序內搜索(sitemap 配置);2、微信小程序的激勵視頻廣告...
摘要:資料整理關于配置微信小程序頁面附關于微信搜索小程序內頁面的功能,只能在線上環境有用,而且沒有提供測試的渠道。二微信小程序激勵視頻廣告接入微信視頻廣告指引截圖具體使用注意激勵視頻廣告組件是一個原生組件,層級比普通組件高。 大綱:根據近期我在小程序開發中接到的需求,總結一下下面四個開發需求所遇到的問題: 1、關于微信現已開放小程序內搜索(sitemap 配置);2、微信小程序的激勵視頻廣告...
摘要:優雅解決微信小程序授權登錄需要觸發聊一聊最近的一個項目,這個項目是一個收書售書的小程序,有商城專欄信息發布論壇等功能。微信不會把的有效期告知開發者。 優雅解決微信小程序授權登錄需要button觸發 聊一聊最近的一個項目,這個項目是一個收書、售書的小程序,有商城、專欄、信息發布論壇等功能。雖然不是面向所有用戶,但要求無論用戶是否授權都皆可使用,但同時也要求部分功能對不授權的用戶限制開放。...
摘要:全屏蒙版彈窗遮不住的層級還是很高的,當出現全屏蒙版彈窗時,是無法蓋住的,可以調用微信的,不過需要注意兼容低版本在類設置的顏色并沒有變化。 從6月份開始到現在,寫小程序將近4個月了開發時給自己埋了不少坑~給大家分享下我的填坑經驗~~ 開發部分 1.小程序的組件修改不能觸發頁面刷新?需要在父級文件上保存下才會觸發(使用wepy開發) 2.接口請求出現的問題?記得勾選調試開發工具上 不校驗...
閱讀 2428·2021-11-23 09:51
閱讀 2457·2021-11-11 17:21
閱讀 3097·2021-09-04 16:45
閱讀 2380·2021-08-09 13:42
閱讀 2218·2019-08-29 18:39
閱讀 2879·2019-08-29 14:12
閱讀 1279·2019-08-29 13:49
閱讀 3363·2019-08-29 11:17