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


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居然支持中文(unicode)编程!
Apr 12 Javascript
用JavaScript实现单继承和多继承的简单方法
Mar 29 Javascript
javascript innerHTML使用分析
Dec 03 Javascript
html+js实现动态显示本地时间
Sep 21 Javascript
Mac地址验证的javascript代码
Nov 09 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
Jun 21 Javascript
jQuery命名空间与闭包用法示例
Jan 12 Javascript
js实现移动端轮播图效果
Dec 09 Javascript
详解node nvm进行node多版本管理
Oct 21 Javascript
vue 自定义 select内置组件
Apr 10 Javascript
小程序实现列表删除功能
Oct 30 Javascript
前端如何实现动画过渡效果
Feb 05 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
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
上海牌131型七灯四波段四喇叭一级收音机
2021/03/02 无线电
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
2016/03/22 PHP
yii2局部关闭(开启)csrf的验证的实例代码
2017/07/10 PHP
javascript 写类方式之九
2009/07/05 Javascript
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
2009/11/28 Javascript
js优化针对IE6.0起作用(详细整理)
2012/12/25 Javascript
文本框只能选择数据到文本框禁止手动输入
2013/11/22 Javascript
使用jQuery加载html页面到指定的div实现方法
2016/07/13 Javascript
原生js轮播(仿慕课网)
2017/02/15 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
AngularJS实现进度条功能示例
2017/07/05 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
JS解析后台返回的JSON格式数据实例
2018/08/06 Javascript
JavaScript中的类型检查
2020/02/03 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
Python中的特殊语法:filter、map、reduce、lambda介绍
2015/04/14 Python
Python3搜索及替换文件中文本的方法
2015/05/22 Python
Python基于列表模拟堆栈和队列功能示例
2018/01/05 Python
使用python验证代理ip是否可用的实现方法
2018/07/25 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
Joe Fresh官网:加拿大时尚品牌和零售连锁店
2016/11/30 全球购物
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
有趣、实用和鼓舞人心的产品:Inspire Uplift
2019/11/05 全球购物
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
大四自我鉴定范文
2013/10/06 职场文书
大学生活学习的自我评价
2013/12/03 职场文书
舞蹈比赛获奖感言
2014/02/04 职场文书
中英文求职信范文
2015/03/19 职场文书
二胎满月酒致辞
2015/07/29 职场文书
2016年中学端午节主题活动总结
2016/04/01 职场文书
神州牡丹园的导游词
2019/11/20 职场文书
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技