当前位置:网站首页>Wechat applet: prevent multiple click jump (function throttling)
Wechat applet: prevent multiple click jump (function throttling)
2020-11-06 01:22:00 【:::::::】
scene
When using applets, there is a situation like this : When network conditions are poor or stuck , Users will think that the click is invalid and make multiple clicks , Many times the page jumps , As the figure below ( Two quick clicks ):
terms of settlement
And then from Easy to understand JS Function throttling and function buffeting We found a solution , Namely Function throttling (throttle): A function that fires multiple times over a period of time will only execute the first time , By the end of this period , No matter how many times it is triggered, it will not execute the function .
/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:
<button bindtap='tap' data-key='abc'>tap</button>
/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)
})
such , Crazy click on the button will only 1s Trigger once .
But then there's a problem , It's when you want to get this.data Got this yes undefined, Or want to get wechat components button Data passed to the click function e It's also undefined, therefore throttle Function also needs to do some processing to make it can be used in the wechat applet page js in .
The reason for this is throttle It returns a new function , It's not the original function anymore . The new function encapsulates the original function , So the component button The parameters passed are in the new function . So we need to pass these parameters to the functions that really need to be executed fn.
final throttle Function as follows :
function throttle(fn, gapTime) {
if (gapTime == null || gapTime == undefined) {
gapTime = 1500
}
let _lastTime = null
// Return the new function
return function () {
let _nowTime = + new Date()
if (_nowTime - _lastTime > gapTime || !_lastTime) {
fn.apply(this, arguments) // take this And parameters to the original function
_lastTime = _nowTime
}
}
}
Click the button again this and e Have it all. :
Reference resources
Source code
- tomfriwel/MyWechatAppDemo Of
throttlepage
Participation of this paper Tencent cloud media sharing plan , You are welcome to join us , share .
版权声明
本文为[:::::::]所创,转载请带上原文链接,感谢
边栏推荐
- Network security engineer Demo: the original * * is to get your computer administrator rights! 【***】
- 6.6.1 localeresolver internationalization parser (1) (in-depth analysis of SSM and project practice)
- 6.1.2 handlermapping mapping processor (2) (in-depth analysis of SSM and project practice)
- Not long after graduation, he earned 20000 yuan from private work!
- 5.4 static resource mapping
- 钻石标准--Diamond Standard
- ES6学习笔记(二):教你玩转类的继承和类的对象
- How long does it take you to work out an object-oriented programming interview question from Ali school?
- How to become a data scientist? - kdnuggets
- Natural language processing - wrong word recognition (based on Python) kenlm, pycorrector
猜你喜欢

快快使用ModelArts,零基礎小白也能玩轉AI!

一篇文章带你了解SVG 渐变知识

IPFS/Filecoin合法性:保护个人隐私不被泄露

Python Jieba segmentation (stuttering segmentation), extracting words, loading words, modifying word frequency, defining thesaurus

Network security engineer Demo: the original * * is to get your computer administrator rights! 【***】

“颜值经济”的野望:华熙生物净利率六连降,收购案遭上交所问询

教你轻松搞懂vue-codemirror的基本用法:主要实现代码编辑、验证提示、代码格式化

How to encapsulate distributed locks more elegantly

Computer TCP / IP interview 10 even asked, how many can you withstand?

vue-codemirror基本用法:实现搜索功能、代码折叠功能、获取编辑器值及时验证
随机推荐
How long does it take you to work out an object-oriented programming interview question from Ali school?
10 easy to use automated testing tools
Mongodb (from 0 to 1), 11 days mongodb primary to intermediate advanced secret
加速「全民直播」洪流,如何攻克延时、卡顿、高并发难题?
Polkadot series (2) -- detailed explanation of mixed consensus
How do the general bottom buried points do?
阿里云Q2营收破纪录背后,云的打开方式正在重塑
使用 Iceberg on Kubernetes 打造新一代云原生数据湖
快快使用ModelArts,零基礎小白也能玩轉AI!
TRON智能钱包PHP开发包【零TRX归集】
每个前端工程师都应该懂的前端性能优化总结:
ES6学习笔记(四):教你轻松搞懂ES6的新增语法
[C / C + + 1] clion configuration and running C language
采购供应商系统是什么?采购供应商管理平台解决方案
Natural language processing - BM25 commonly used in search
如何将数据变成资产?吸引数据科学家
Use of vuepress
Network security engineer Demo: the original * * is to get your computer administrator rights! 【***】
Can't be asked again! Reentrantlock source code, drawing a look together!
Python Jieba segmentation (stuttering segmentation), extracting words, loading words, modifying word frequency, defining thesaurus