首页 >  编程教程 >  javascript教程 >  正文

js防抖原理及其实现

 作者:潘某人SEO
989

在前端中有一些事件会频繁的触发容易造成页面卡顿,例如:window 的 resize、scroll、mousedown、mousemove、keyup、keydown等事件。
js抖动的原因:短的时间内多次连续触发事件,首先会十分影响性能,同时大量运行结果被集中输出,结果之间不规律的冲突变化导致页面抖动。

防抖实现原理

限制下次函数调用之前必须等待的一段事件,如果事件在不断的触发就不断的重置这个等待事件,等到操作完毕不在触发事件的时候,此时在执行事件。比如window 下的scroll事件,当你滚动的时候scroll事件是不断地被触发的,而实际上需要的结果是在滚动停止的位置,其余的都属于一个过程阶段,没有必要去触发事件。

function debounce(fn,wait){
    var timer = null;
    return function(){
        if(timer !== null){
            clearTimeout(timer);
        }
        timer = setTimeout(fn,wait);
    }
}
1
2
3
4
5
6
7
8
9

以上就是js防抖功能的实现,只要调用debounce(fn,wait)即可,其中fn是你需要执行的函数的名称,wait是触发事件的时间间隔。下面就按window下的scoll事件为例,可以根据实际的业务需求来选择触发方式来调用debounce(fn,wait),js防抖函数。
js防抖原理

function yourFunction(){
    //需要执行的功能
    console.log("潘某人seo")
}
window.addEventListener("scroll",debounce(yourFunction,1000));
1
2
3
4
5

上述代码就是实现了,scroll事件的js防抖功能,实现的效果则是,只要鼠标在滚动也就是scroll事件一直在触发,就不会执行目标函数yourFunction,只有当鼠标停止滚动超过了wait事件1000ms,才会执行函数yourFunction,输出一次“潘某人SEO”,而不是鼠标滚动一下就输出一遍“潘某人SEO”。

申明:以上内容仅代表个人观点,仅供学习参考 本站图片来源于站点原创或CC0协议图库站点或已获得VRF授权的图库站点 版权申明:本文为博主原创,未经授权任何个人或组织单位不得复制、转载、摘编以及其它形式的应用! 本文地址:https://www.chateach.com/it/javascript/856jsfangdou
相关文章
  • springboot网站搭建部署详细流程

    springboot

    linux环境如何搭建java框架springboot,为大家演示一种快速简单的搭建springboot的方法。由于springboot是java的众多框架之一,因此需要部署好java的运行环境,即服务器安装好jdk18以及tomcat3,注意版本的兼容性。

    1068
    • springboot
  • SpringBoot——Thymeleaf中的条件判断

    Thymeleaf

    SpringBoot——Thymeleaf中的条件判断(th:if、th:unless、th:switch、th:case),th:if、th:unless、th:switch、th:case 这几个属性,其实和JSP里面的那些标签都是类似的,含义就可以理解为Java语言中的if、else、switch-case这些条件判断一样,所以这里就不再详细叙述了,下面就直接给出例子!!!

    1371
    • Thymeleaf
  • php时间增减操作

    时间删减

    php时间增减操作,如何获取当前时间加减几个小时、几个星期、几个月。如何时间快速简单的对时间的一个计算呢?

    1078
    • 时间删减
  • Java字符串的替换replace()、replaceFirst()和replaceAll()

    java,字符串

    Java字符串的替换replace()、replaceFirst()和replaceAll(),如何匹配替换字符串中的内容。

    533
    • java
    • 字符串
  • php生成n位随机数

    php随机数

    php如何生成n位的随机数,给大家分享一个简单高效的方法,这里以随机生成6位数作为一个例子给大家演示。使用php的str_pad()和mt_rand()函数生成随机数。

    1305
    • php随机数
  • linux系统CentOS发送邮件

    CentOS发送邮件

    如何在linux、ubuntu、centos系统中发送邮件,如定时发送网站日志,或者服务器信息状态,如何在centos系统中配置邮件发送功能。

    1204
    • CentOS发送邮件
  • OpenSSL 拒绝服务漏洞修复教程

    OpenSSL 拒绝服务漏洞

    OpenSSL 拒绝服务漏洞修复及版本升级教程。2020年12月08日,OpenSSL官方发布安全公告,披露CVE-2020-1971 OpenSSL GENERAL_NAME_cmp 拒绝服务漏洞。EDIPARTYNAME时,由于GENERAL_NAME_cmp函数未能正确处理,从而导致空指针引用,并可能导致拒绝服务。

    906
    • OpenSSL 拒绝服务漏洞
  • SpringBoot中的异常处理的详细教程

    SpringBoot,异常处理

    SpringBoot中的异常处理的详细教程,处理用户请求出现运行时异常时直接响应给用户的是一个错误界面,对于用户的使用体验不友好。什么是全局异常处理机制,用来解决整个系统中任意一个控制器抛出异常时的统一处理入口,如何使用全局异常处理类 implements HandlerExceptionResolver,之后重写接口中的resolveException方法。

    791
    • SpringBoot
    • 异常处理
  • Vue3 中全局引入 axios及其使用方法

    axios使用方法,Vue3

    Vue3如何安装axios,如何在全局使用axios,定义全局属性来使用axios,基本上每个页面都要使用到axios,因此在main.js中定义全局属性来实现axios告别繁杂的引用。

    667
    • axios使用方法
    • Vue3
  • Laravel邮件发送功能的实现例子

    Laravel邮件发送

    Laravel如何发送邮件呢?Laravel邮件发送功能的实现例子,从邮箱注册配置到,laravel邮件参数配置,提供纯文本邮件和富文本邮件发送两种邮件发送实例。

    1450
    • Laravel邮件发送
  • vue框架简介及其优势

    vue框架,vue优势

    vue框架简介及其优势,Vue 是一套用于构建用户界面的渐进式JavaScript框架,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。。但是vue对于SEO并不是非常友好,及其解决方案。

    1333
    • vue框架
    • vue优势
  • php简介

    什么是php

    PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习

    1152
    • 什么是php
  • Java获取IP,如何获取到访客的真实公网ip

    Java获取IP

    springboot,java如何获取用户的真实ip地址呢?项目开发中,不管是什么应用不管是什么语言,获取ip地址是非常关键的一环,因为管是操作日志的记录还是业务的需求上都不可或缺的用到访客的ip地址,那么在java中如何获取到IP地址呢?

    651
    • Java获取IP
  • laravel Request的所有方法详解

    laravel Request,cookie,http参数

    laravel Request的所有方法详解,laravel实现如何获取cookie、表单参数、提交的文件、laravel如何获取网址url、路径、ip、端口等。

    1276
    • laravel Request
    • cookie
    • http参数
  • linux服务器如何部署java运行环境

    linux服务,部署java

    linux服务器需要运行java程序那么就需要jvm服务,同时为了方便开发维护直接安装jdk即可。对于java网站的运行则还需要安装Tomcat。下面就以在centos服务器上演示一下java运行环境的部署。

    880
    • linux服务
    • 部署java
  • 如何解决Vue中mounted不能获取到data

    mounted获取data

    Vue中使用mounted时,无法获取到data的原因是,this无法指向data中的数据。在mounted生命周期中this指向的是window对象而不是Vue对象,所以真正找的是window对象下的data,但是window下没有data,所以就报错了。

    1514
    • mounted获取data
  • laravel url路由中存在双斜杠(//)造成404问题

    laravel路由双斜杠

    解决在laravel框架下,网站的首页后面加上双斜杠(//),页面显示的尽然不是首页,是一个空白的页面状态码是200,或者报404错误。

    1621
    • laravel路由双斜杠
  • SpringBoot--Thymeleaf日期格式处理

    Thymeleaf,日期格式

    Thymeleaf作为众多模板引擎中的一种,我最初也是对它充满了陌生,在SpringBoot如何处理时间格式,SpringBoot--Thymeleaf日期格式处理。

    653
    • Thymeleaf
    • 日期格式
-- 这已经是底线了,看看别的把! --