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


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转换农历类实现及调用方法
Jan 27 Javascript
javascript获取鼠标位置部分的实例代码(兼容IE,FF)
Aug 05 Javascript
详解javascript跨浏览器事件处理程序
Mar 27 Javascript
JQuery 动态生成Table表格实例代码
Dec 02 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
Jun 28 Javascript
JavaScript阻止表单提交方法(附代码)
Aug 15 Javascript
node通过express搭建自己的服务器
Sep 30 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
May 30 Javascript
深入理解移动前端开发之viewport
Oct 19 Javascript
原生js实现3D轮播图
Mar 21 Javascript
Windows上node.js的多版本管理工具用法实例分析
Nov 06 Javascript
TypeScript 内置高级类型编程示例
Sep 23 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
第十五节--Zend引擎的发展
2006/11/16 PHP
php 代码优化之经典示例
2011/03/24 PHP
php中防止伪造跨站请求的小招式
2011/09/02 PHP
PHP清除缓存的几种方法总结
2017/09/12 PHP
Apache站点配置SSL强制跳转443
2021/03/09 Servers
JQuery 学习笔记 选择器之一
2009/07/23 Javascript
ExtJS TabPanel beforeremove beforeclose使用说明
2010/03/31 Javascript
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
2011/03/25 Javascript
javascript倒计时功能实现代码
2012/06/07 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
node.js中使用q.js实现api的promise化
2014/09/17 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
jquery实现表单输入时提示文字滑动向上效果
2015/08/10 Javascript
jQuery动画效果相关方法实例分析
2015/12/31 Javascript
Bootstrap零基础入门教程(二)
2016/07/18 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
bootstrap手风琴制作方法详解
2017/01/11 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
2017/04/10 Javascript
javascript中的隐式调用
2018/02/10 Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
2019/03/22 Javascript
tensorflow学习教程之文本分类详析
2018/08/07 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
2019/08/08 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
2019/11/11 Python
Python的控制结构之For、While、If循环问题
2020/06/30 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
幼儿教师自我鉴定
2013/11/02 职场文书
数控机械专业个人的自我评价
2014/01/02 职场文书
历史专业大学生职业生涯规划书
2014/03/13 职场文书
科长竞聘演讲稿
2014/05/16 职场文书
2014年教师政治学习材料
2014/06/02 职场文书
实习单位意见
2015/06/04 职场文书
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python
JS实现简单九宫格抽奖
2022/06/28 Javascript