当前位置:网站首页>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 .
版权声明
本文为[:::::::]所创,转载请带上原文链接,感谢
边栏推荐
- 5.4 static resource mapping
- Leetcode's ransom letter
- Windows 10 tensorflow (2) regression analysis of principles, deep learning framework (gradient descent method to solve regression parameters)
- 前端都应懂的入门基础-github基础
- 每个前端工程师都应该懂的前端性能优化总结:
- ipfs正舵者Filecoin落地正当时 FIL币价格破千来了
- Python自动化测试学习哪些知识?
- Relationship between business policies, business rules, business processes and business master data - modern analysis
- Didi elasticsearch cluster cross version upgrade and platform reconfiguration
- How to select the evaluation index of classification model
猜你喜欢
![[JMeter] two ways to realize interface Association: regular representation extractor and JSON extractor](/img/cc/17b647d403c7a1c8deb581dcbbfc2f.jpg)
[JMeter] two ways to realize interface Association: regular representation extractor and JSON extractor

容联完成1.25亿美元F轮融资

Did you blog today?

Troubleshooting and summary of JVM Metaspace memory overflow

TRON智能钱包PHP开发包【零TRX归集】

业内首发车道级导航背后——详解高精定位技术演进与场景应用

I think it is necessary to write a general idempotent component

Summary of common algorithms of linked list

DevOps是什么

From zero learning artificial intelligence, open the road of career planning!
随机推荐
How to select the evaluation index of classification model
ES6学习笔记(四):教你轻松搞懂ES6的新增语法
Network security engineer Demo: the original * * is to get your computer administrator rights! 【***】
What is the difference between data scientists and machine learning engineers? - kdnuggets
“颜值经济”的野望:华熙生物净利率六连降,收购案遭上交所问询
How to encapsulate distributed locks more elegantly
Filecoin最新动态 完成重大升级 已实现四大项目进展!
Python download module to accelerate the implementation of recording
vue-codemirror基本用法:实现搜索功能、代码折叠功能、获取编辑器值及时验证
每个前端工程师都应该懂的前端性能优化总结:
Natural language processing - wrong word recognition (based on Python) kenlm, pycorrector
Just now, I popularized two unique skills of login to Xuemei
关于Kubernetes 与 OAM 构建统一、标准化的应用管理平台知识!(附网盘链接)
向北京集结!OpenI/O 2020启智开发者大会进入倒计时
Use of vuepress
使用 Iceberg on Kubernetes 打造新一代云原生数据湖
In order to save money, I learned PHP in one day!
Skywalking series blog 5-apm-customize-enhance-plugin
Linked blocking Queue Analysis of blocking queue
Analysis of react high order components