当前位置:网站首页>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
throttle
page
Participation of this paper Tencent cloud media sharing plan , You are welcome to join us , share .
版权声明
本文为[:::::::]所创,转载请带上原文链接,感谢
边栏推荐
- 在大规模 Kubernetes 集群上实现高 SLO 的方法
- 6.5 request to view name translator (in-depth analysis of SSM and project practice)
- Can't be asked again! Reentrantlock source code, drawing a look together!
- 從小公司進入大廠,我都做對了哪些事?
- ES6学习笔记(二):教你玩转类的继承和类的对象
- Don't go! Here is a note: picture and text to explain AQS, let's have a look at the source code of AQS (long text)
- Python Jieba segmentation (stuttering segmentation), extracting words, loading words, modifying word frequency, defining thesaurus
- TRON智能钱包PHP开发包【零TRX归集】
- 带你学习ES5中新增的方法
- Mongodb (from 0 to 1), 11 days mongodb primary to intermediate advanced secret
猜你喜欢
Just now, I popularized two unique skills of login to Xuemei
做外包真的很难,身为外包的我也无奈叹息。
人工智能学什么课程?它将替代人类工作?
Filecoin的经济模型与未来价值是如何支撑FIL币价格破千的
hadoop 命令总结
一篇文章带你了解CSS 分页实例
Did you blog today?
Linked blocking Queue Analysis of blocking queue
数字城市响应相关国家政策大力发展数字孪生平台的建设
Don't go! Here is a note: picture and text to explain AQS, let's have a look at the source code of AQS (long text)
随机推荐
Troubleshooting and summary of JVM Metaspace memory overflow
数字城市响应相关国家政策大力发展数字孪生平台的建设
6.3 handlerexceptionresolver exception handling (in-depth analysis of SSM and project practice)
Synchronous configuration from git to consult with git 2consul
Using Es5 to realize the class of ES6
比特币一度突破14000美元,即将面临美国大选考验
Thoughts on interview of Ali CCO project team
Word segmentation, naming subject recognition, part of speech and grammatical analysis in natural language processing
Did you blog today?
容联完成1.25亿美元F轮融资
Let the front-end siege division develop independently from the back-end: Mock.js
Nodejs crawler captures ancient books and records, a total of 16000 pages, experience summary and project sharing
怎么理解Python迭代器与生成器?
EOS创始人BM: UE,UBI,URI有什么区别?
How do the general bottom buried points do?
带你学习ES5中新增的方法
数据产品不就是报表吗?大错特错!这分类里有大学问
Process analysis of Python authentication mechanism based on JWT
Windows 10 tensorflow (2) regression analysis of principles, deep learning framework (gradient descent method to solve regression parameters)
Real time data synchronization scheme based on Flink SQL CDC