微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)


Posted in Javascript onSeptember 19, 2019

一、函数节流(throttle)

**函数节流:一个函数执行一次后,只有大于设定的执行周期后才会执行第二次**。有个需要频繁触发函数,出于优化性能角度,在规定时间内,只让函数触发的第一次生效,后面不生效。

### 1.如何实现
其原理是用时间戳来判断是否已到回调该执行时间,记录上次执行的时间戳,然后每次触发 scroll 事件执行回调,回调中判断当前时间戳距离上次执行时间戳的间隔是否已经到达 规定时间段,如果是,则执行,并更新上次执行的时间戳,如此循环;

function throttle(fn, delay) {
// 记录上一次函数触发的时间
var lastTime = 0;
return function() {
// 记录当前函数触发的时间
var nowTime = Date.now();
if (nowTime - lastTime > delay) {
// 修正this指向问题
fn.call(this);
// 同步时间
lastTime = nowTime;
}
}
}
document.onscroll = throttle(function() { console.log('scroll事件被触发了' + Date.now()) }, 200)

微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)

### 2.函数节流的应用场景
需要间隔一定时间触发回调来控制函数调用频率:

* DOM 元素的拖拽功能实现(mousemove)
* 搜索联想(keyup)
* 计算鼠标移动的距离(mousemove)
* Canvas 模拟画板功能(mousemove)
* 射击游戏的 mousedown/keydown 事件(单位时间只能发射一颗子弹)
* 监听滚动事件判断是否到页面底部自动加载更多:给 scroll 加了 debounce 后,只有用户停止滚动后,才会判断是否到了页面底部;如果是 throttle 的话,只要页面滚动就会间隔一段时间判断一次

二、函数防抖(debounce)

**防抖函数:一个需要频繁触发的函数,在规定时间内,只让最后一次生效,前面的不生效。**

### 1.如何实现

其原理就第一次调用函数,创建一个定时器,在指定的时间间隔之后运行代码。当第二次调用该函数时,它会清除前一次的定时器并设置另一个。如果前一个定时器已经执行过了,这个操作就没有任何意义。然而,如果前一个定时器尚未执行,其实就是将其替换为一个新的定时器,然后延迟一定时间再执行。

<button id='btn'>按钮</button>
<script type="text/javascript">
function debounce(fn, delay) {
// 记录上一次的延时器
var timer = null;
return function() {
// 清除上一次延时器
clearTimeout(timer)
timer = setTimeout(function() {
fn.apply(this)
}, delay)
}
}
document.getElementById('btn').onclick = debounce(function() {
console.log('点击事件被触发' + Date.now())
}, 1000)
</script>

微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)

### 2.函数防抖的应用场景

对于连续的事件响应我们只需要执行一次回调:

* 每次 resize/scroll 触发统计事件
* 文本输入的验证(连续输入文字后发送 AJAX 请求进行验证,验证一次就好)

总结

以上所述是小编给大家介绍的微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
JavaScript获取网页表单action属性的方法
Apr 02 Javascript
JavaScript生成福利彩票双色球号码
May 15 Javascript
分享一个原生的JavaScript拖动方法
Sep 25 Javascript
JavaScript Date 知识浅析
Jan 29 Javascript
js正则表达式验证密码强度【推荐】
Mar 03 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
Jun 15 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
Aug 18 Javascript
微信小程序实现的一键拨号功能示例
Apr 24 Javascript
24行JavaScript代码实现Redux的方法实例
Nov 17 Javascript
JQuery常用简单动画操作方法回顾与总结
Dec 07 jQuery
JS实现打砖块游戏
Feb 14 Javascript
React四级菜单的实现
Apr 08 Javascript
vue 设置 input 为不可以编辑的实现方法
Sep 19 #Javascript
node 标准输入流和输出流代码实例
Sep 19 #Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
Sep 19 #Javascript
微信小程序3D轮播实现代码
Sep 19 #Javascript
layui 实现表格某一列显示图标
Sep 19 #Javascript
微信小程序防止多次点击跳转(函数节流)
Sep 19 #Javascript
layui按条件隐藏表格列的实例
Sep 19 #Javascript
You might like
php UTF-8、Unicode和BOM问题
2010/05/18 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
PHP 文件锁与进程锁的使用示例
2017/08/07 PHP
动态调用css文件——jquery的应用
2007/02/20 Javascript
把textarea中字符串里含有的回车换行替换成&amp;lt;br&amp;gt;的javascript代码
2007/04/20 Javascript
JS IE和FF兼容性问题汇总
2009/02/09 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
JavaScript 字符串常用操作小结(非常实用)
2016/11/30 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
python下如何让web元素的生成更简单的分析
2008/07/17 Python
Python通过解析网页实现看报程序的方法
2014/08/04 Python
零基础写python爬虫之爬虫框架Scrapy安装配置
2014/11/06 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
Python File(文件) 方法整理
2019/02/18 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
python绘制分布折线图的示例
2020/09/24 Python
电焊工岗位职责
2014/03/06 职场文书
校园活动宣传方案
2014/03/28 职场文书
解除劳动合同协议书
2014/04/14 职场文书
小组口号大全
2014/06/09 职场文书
历史学专业求职信
2014/06/19 职场文书
班级活动总结格式
2014/08/30 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
给老婆的保证书
2015/01/16 职场文书
防卫过当辩护词
2015/05/21 职场文书
2015年学生资助工作总结
2015/05/25 职场文书
培训班开班主持词
2015/07/02 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书
创业计划书之溜冰场
2019/10/25 职场文书
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL