• 防抖和节流方法实现


    防抖和节流记录

    防抖简介

    1. resize和scroll等事件操作的时候,会非常频繁的触发导致页面不断的重新渲染,非常影响性能,加重浏览器负担,导致用户体验不好,防抖函数就是当事件持续触发事件时,debounce函数会把事件合并且不会触发回调,当停止触发事件delay时长的时候才会触发事件。
     function debounce(fn, delay, immediate) {
        // fn是回调函数,delay是延迟时间,immediate是否先执行一次再节流
        var timer = null,
            _this, args
        return function() {
            //
            _this = this
            args = arguments
            // 如果有定时器先清除,让定时器的函数不执行
            timer && clearTimeout(timer)
            if (immediate) {
                // 没有定时器的话,告诉后面的函数可以先执行一次,首次进入函数没有定义定时器,do为true
                var do = !timer
                // 然后在delay时间以后将timer设置为null,首次执行之后,只有在timer为null之后才会再次执行
                timer = setTimeout(function() {
                    timer = null
                }, delay)
                if (do) {
                    fn.apply(_this, args)
                }
            } else {
                // 如果没设置第三个参数,就是什么时候停止,之后delay时间才执行
                timer = setTimeout(function() {
                    fn.apply(_this, args)
                }, delay)
            }
    
        }
    }
    

    节流简介

    1. 节流也是解决类似的问题,节流只允许回调函数在规定时间内只执行一次,和防抖的最大区别是,无论多频繁的触发事件,都会保证在规定时间内执行一次回调
     function throttle(fn, delay) {
        var before = Date.now()
        return function() {
            var _this = this,
                args = arguments
            var now = Date.now()
            if (now - before - delay >= 0) {
                before = now
                setTimeout(function() {
                    fn.apply(_this, args)
                }, delay)
            }
        }
    }
    
  • 相关阅读:
    linux中nc命令
    Centos6.5 安装zabbix3(收藏,非原创)
    紀念
    算法学习资源收集
    一道奇怪的求和题
    P5717 题解
    P1424 刷题记录
    P1888 题解
    P1422 刷题记录
    P1055 题解
  • 原文地址:https://www.cnblogs.com/ytg-share/p/8794341.html
Copyright © 2020-2023  润新知