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


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 相关文章推荐
教你在heroku云平台上部署Node.js应用
Jul 30 Javascript
js时间日期格式化封装函数
Dec 02 Javascript
深入理解JavaScript程序中内存泄漏
Mar 17 Javascript
在JavaScript中模拟类(class)及类的继承关系
May 20 Javascript
vue2.0中click点击当前li实现动态切换class
Jun 21 Javascript
基于js中this和event 的区别(详解)
Oct 24 Javascript
详解ES6中的三种异步解决方案
Jun 28 Javascript
详解使用jest对vue项目进行单元测试
Sep 07 Javascript
JavaScript实现多文件下载方法解析
Aug 07 Javascript
JavaScript实现图片放大预览效果
Nov 02 Javascript
在vant 中使用cell组件 定义图标该图片和位置操作
Nov 02 Javascript
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
Jan 13 Vue.js
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
web方式ftp
2006/10/09 PHP
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
2012/03/01 PHP
PHP ElasticSearch做搜索实例讲解
2020/02/05 PHP
js中匿名函数的N种写法
2010/09/08 Javascript
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
jquery根据name属性查找的小例子
2013/11/21 Javascript
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
详谈javascript中DOM的基本属性
2015/02/26 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
2016/01/15 Javascript
jQuery+css3实现转动的正方形效果(附demo源码下载)
2016/01/27 Javascript
JS &amp; JQuery 动态添加 select option
2016/06/08 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
[02:46]2014DOTA2国际邀请赛 选手为你解读比赛MVP充满梦想
2014/07/09 DOTA
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
python实现爬虫下载漫画示例
2014/02/16 Python
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
python3实现基于用户的协同过滤
2018/05/31 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
2018/10/14 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
2019/07/25 Python
Django框架创建mysql连接与使用示例
2019/07/29 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
利用Python实现Excel的文件间的数据匹配功能
2020/06/16 Python
基于Keras中Conv1D和Conv2D的区别说明
2020/06/19 Python
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
关于毕业的中学校园广播稿
2014/01/26 职场文书
实名检举信范文
2015/03/02 职场文书
单位同意报考证明
2015/06/17 职场文书
初中生物教学反思
2016/02/20 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
golang 比较浮点数的大小方式
2021/05/02 Golang