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


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 相关文章推荐
js 图片缩放(按比例)控制代码
May 27 Javascript
input输入框的自动匹配(原生代码)
Mar 19 Javascript
Array栈方法和队列方法的特点说明
Jan 24 Javascript
JS操作CSS随机改变网页背景实现思路
Mar 10 Javascript
JS去除重复并统计数量的实现方法
Dec 15 Javascript
详解关于react-redux中的connect用法介绍及原理解析
Sep 11 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
Jan 18 Javascript
使用selenium抓取淘宝的商品信息实例
Feb 06 Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
Dec 20 Javascript
layer.open回调获取弹出层参数的实现方法
Sep 10 Javascript
JS实现灯泡开关特效
Mar 30 Javascript
quickjs 封装 JavaScript 沙箱详情
Nov 02 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如何将日志写进syslog
2013/06/28 PHP
高性能PHP框架Symfony2经典入门教程
2014/07/08 PHP
PHP中Session和Cookie是如何操作的
2015/10/10 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
JavaScript支持的最大递归调用次数分析
2014/06/24 Javascript
jQuery中$.click()无效问题分析
2015/01/29 Javascript
js实现数字每三位加逗号的方法
2015/02/05 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
JQuery实现级联下拉框效果实例讲解
2015/09/17 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
浅谈JS中String()与 .toString()的区别
2016/10/20 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
Vue filter介绍及其使用详解
2017/10/21 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
使用 vue.js 构建大型单页应用
2018/02/10 Javascript
webpack4.x CommonJS模块化浅析
2018/11/09 Javascript
微信小程序实现发送验证码按钮效果
2018/12/20 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
2020/04/09 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
2020/06/07 Javascript
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
2020/05/26 HTML / CSS
美国摄影爱好者购物网站:Focus Camera
2016/10/21 全球购物
C#面试常见问题
2013/02/25 面试题
优秀毕业生求职推荐信范文
2013/11/21 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
交通事故和解协议书
2014/09/25 职场文书
工商局调档介绍信
2015/10/22 职场文书