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


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中设置元素class的三种方法小结
Aug 28 Javascript
实现动画效果核心方式的js代码
Sep 27 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
Sep 14 Javascript
Jquery zTree 树控件异步加载操作
Feb 25 Javascript
javascript数组常用方法汇总
Sep 10 Javascript
JS实现向iframe中表单传值的方法
Mar 24 Javascript
JavaScript禁止微信浏览器下拉回弹效果
May 16 Javascript
基于JavaScript实现抽奖系统
Jan 16 Javascript
React Component存在的几种形式详解
Nov 06 Javascript
JavaScript变速动画函数封装添加任意多个属性
Apr 03 Javascript
layui在form表单页面通过Validform加入简单验证的方法
Sep 06 Javascript
uniapp开发小程序的经验总结
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
在普通HTTP上安全地传输密码
2007/07/21 PHP
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
解析php中如何调用用户自定义函数
2013/08/06 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
2016/10/08 PHP
php结合ajax实现手机发红包的案例
2016/10/13 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
javascript Keycode对照表
2009/10/24 Javascript
js tab效果的实现代码
2009/12/26 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
2011/09/26 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
JavaScript中eval函数的问题
2016/01/31 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
Javascript生成带参数的二维码示例
2016/10/10 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
浅谈angularjs依赖服务注入写法的注意点
2017/04/24 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
微信小程序 自定义弹窗实现过程(附代码)
2019/12/05 Javascript
nodejs制作小爬虫功能示例
2020/02/24 NodeJs
对vuex中store和$store的区别说明
2020/07/24 Javascript
jquery实现拖拽添加元素功能
2020/12/01 jQuery
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
html5中去掉input type date默认样式的方法
2018/09/06 HTML / CSS
美国最大的烧烤架和户外生活用品专业零售商:Barbeques Galore
2021/01/09 全球购物
大学军训自我鉴定
2013/12/15 职场文书
刚毕业大学生自荐信范文
2014/02/20 职场文书
三年级小学生评语
2014/04/22 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书