当前位置:网站首页>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 .
版权声明
本文为[:::::::]所创,转载请带上原文链接,感谢
边栏推荐
- It's so embarrassing, fans broke ten thousand, used for a year!
- 100元扫货阿里云是怎样的体验?
- Brief introduction of TF flags
- 中小微企业选择共享办公室怎么样?
- 前端基础牢记的一些操作-Github仓库管理
- Summary of common string algorithms
- Can't be asked again! Reentrantlock source code, drawing a look together!
- Network security engineer Demo: the original * * is to get your computer administrator rights! 【***】
- Troubleshooting and summary of JVM Metaspace memory overflow
- Polkadot series (2) -- detailed explanation of mixed consensus
猜你喜欢

一篇文章带你了解CSS对齐方式

Do not understand UML class diagram? Take a look at this edition of rural love class diagram, a learn!

Can't be asked again! Reentrantlock source code, drawing a look together!

Thoughts on interview of Ali CCO project team

多机器人行情共享解决方案

全球疫情加速互联网企业转型,区块链会是解药吗?

It's so embarrassing, fans broke ten thousand, used for a year!

比特币一度突破14000美元,即将面临美国大选考验

钻石标准--Diamond Standard

ipfs正舵者Filecoin落地正当时 FIL币价格破千来了
随机推荐
小程序入门到精通(二):了解小程序开发4个重要文件
Linked blocking Queue Analysis of blocking queue
ES6 essence:
Skywalking series blog 1 - install stand-alone skywalking
IPFS/Filecoin合法性:保护个人隐私不被泄露
html
TRON智能钱包PHP开发包【零TRX归集】
Natural language processing - wrong word recognition (based on Python) kenlm, pycorrector
快快使用ModelArts,零基础小白也能玩转AI!
Computer TCP / IP interview 10 even asked, how many can you withstand?
Vuejs development specification
Vue 3 responsive Foundation
Real time data synchronization scheme based on Flink SQL CDC
6.5 request to view name translator (in-depth analysis of SSM and project practice)
(2)ASP.NET Core3.1 Ocelot路由
How long does it take you to work out an object-oriented programming interview question from Ali school?
前端基础牢记的一些操作-Github仓库管理
I think it is necessary to write a general idempotent component
使用 Iceberg on Kubernetes 打造新一代云原生数据湖
JVM memory area and garbage collection