分享web开发知识

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

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

js中的防抖、节流、点击事件回调

发布时间:2023-09-06 02:27责任编辑:赖小花关键词:js点击事件

  以前,贴吧骗赞有个说法,快速点击两次可以赞两下哦,这个情况倒是可以发生的,就是将点赞信息提交了多次。就算后端帮助判断了不能点赞多次,将错误信息返回前台,频繁提示“不能多次点赞”看起来也是很Low。我们可以根据需求来使用下面几种方式让效果、性能都能完美实现。

  防抖的原理是在规定触发时间内,多次点击,都会重新刷新触发时间,直到触发时间完成回调才会触发。防抖的运用场景大多在搜索关联词匹配、window窗口的变化已经滚动条的滚动。

  节流的原理是在规定时间内不管点击多少次都只会执行一次。而像我们提交信息的话,需要的是当后台返回信息后,我们做自己的逻辑判断。节流的运用场景在瀑布流更新列表信息、当然短时间内不能重复提交、点击事件也可以拿来使用。

  防抖的核心实现代码如下:

 1 ????????????//防抖 2 ????????????function debounce(fun, delay = 200) { 3 ????????????????return function (args) { 4 ????????????????????//获取函数的作用域和变量 5 ????????????????????let that = this 6 ????????????????????let _args = args 7 ????????????????????//每次事件被触发,都会清除当前的timeer,然后重写设置超时调用 8 ????????????????????clearTimeout(fun.id) 9 ????????????????????fun.id = setTimeout(function () {10 ????????????????????????fun.call(that, _args)11 ????????????????????}, delay)12 ????????????????}13 ????????????}

  节流的核心实现代码如下:

 1 ????????????//节流 2 ????????????function throttle(fun, delay = 1000) { 3 ????????????????let last, deferTimer; 4 ????????????????return function (args) { 5 ????????????????????let that = this; 6 ????????????????????let _args = arguments; 7 ?8 ????????????????????let now = +new Date(); 9 ????????????????????if (last && now < last + delay) {10 ????????????????????????clearTimeout(deferTimer);11 ????????????????????????deferTimer = setTimeout(function () {12 ????????????????????????????last = now;13 ????????????????????????????fun.apply(that, _args);14 ????????????????????????}, delay)15 ????????????????????} else {16 ????????????????????????last = now;17 ????????????????????????fun.apply(that, _args);18 ????????????????????}19 ????????????????}20 ????????????}

  而点击期间不能再次点击,我们可以设置一个全局变量,用户点击后变量切换状态,该状态不能再次点击操作。

js中的防抖、节流、点击事件回调

原文地址:https://www.cnblogs.com/wlxll/p/10148540.html

知识推荐

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