分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

js节流函数和js防止重复提交的N种方法

发布时间:2023-09-06 01:40责任编辑:彭小芳关键词:js

应用情景

经典使用情景:js的一些事件,比如:onresize、scroll、mousemove、mousehover等;

还比如:手抖、手误、服务器没有响应之前的重复点击;

这些都是没有意义的,重复的无效的操作,设置对整个系统的影响还可能是致命的,所以我们要对重复点击的事件进行相应的处理!

节流函数

所谓的节流函数顾名思义,就是某个时刻限制函数的重复调用。

同样节流函数也是为了解决函数重复提交的问题,而防止重复提交的方法,不止节流函数一种实现。

方法汇总

本文整理了我在工作实践当中,觉的防止js重复提交,比较好用的方法,在这里和大家分享一下。

一、setTimeout + clearTimeout(节流函数)

  本文提供两种实现方式:普通节流函数和闭包节流函数

二、设定flag/js加锁

三、通过disable

四、添加浮层比如loading图层防止多次点击

具体实现

一、setTimeout + clearTimeout(节流函数)

方式一:闭包节流函数(可传递多个参数)

/** * 闭包节流函数方法(可传参数) * @param Function fn 延时调用函数 * @param Number delay 延迟多长时间 * @return Function 延迟执行的方法 */var throttle = function (fn, delay) { ???var timer = null; ???return function () { ???????var args = arguments; //参数集合 ???????clearTimeout(timer); ???????timer = setTimeout(function () { ???????????fn.apply(this, args); ???????}, delay); ???}}/** * 要执行的方法 * @param String name 传递的参数 */function postFun(name) { ???document.writeln("名字:" + name);}//================测试部分 => 【1s重复点击10次】var t = throttle(postFun, 1000);var ejector = setInterval(() => { ???t("tiger");}, 100);setTimeout(() => { ???clearInterval(ejector);}, 1000);

执行结果:

方式二:普通节流函数方法

/** * 普通节流函数方法 * @param Function fn 延时调用函数 * @param Number delay 延迟多长时间 */function throttle(fn, delay) { ???if (fn._id) { ???????clearTimeout(fn._id); ???} ???fn._id = window.setTimeout(() => { ???????fn(); ???????fn._id = null; ???}, delay);}/** * 要执行的方法 */function postFun() { ???document.writeln(new Date().getTime());}//================测试部分 => 【1s重复点击10次】var interval = setInterval(() => { ???throttle(postFun, 1000);}, 100);setTimeout(() => { ???clearInterval(interval);}, 1000);

执行结果:

二、设定flag/js加锁

var lock = false;jQuery("#submit").on(‘click‘, function () { ???if (lock) { ???????return false; ???} ???jQuery.post(url, data, function (response) { ???????//TODO:业务代码 ???????lock = false; ???});});

 

总结

前两种方式实现起来比较方便,而后两种实现起来相对比较繁琐,推荐使用闭包的节流函数去处理重复提交的问题。

js节流函数和js防止重复提交的N种方法

原文地址:https://www.cnblogs.com/vipstone/p/8400168.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved