节流和防抖函数,函数的节流和防抖

news/2024/7/19 14:13:39 标签: js

1 基于操作的节流,防抖

  • 定义函数,绑定滚动事件
var num = 0;
function demo(){
    console.log(++num);
}

// 基于操作的节流,防抖
// 定义定时器句柄
var timebar
// 高频事件
window.onscroll  = function(){
    // 基于操作的,在高频事件中,执行最后一次
    // 将函数放在定时器中,每次触发事件,取消执行,直到最后一次,滚动事件停止的时候执行一次
    clearTimeout(timebar);
    timebar = setTimeout(demo,200);
}

  • 封装成函数
window.onscroll  = function(){
	// 使用防抖函数
	throttle(demo);
}


function throttle(fn){
    // 清除定时器
    clearTimeout(fn.__timebar);
    // 执行定时器
    // 函数也属于对象,因此可以添加属性,一般都用两个下划线封装私有属性
    fn.__timebar = setTimeout(fn,200);
}

2 基于时间的节流

// 定义锁
var lock = false;
// 基于时间的节流
window.onscroll = function(){
    if (lock){
        return;
    }
    lock = true;
    // 在1秒之内,无论触发多少次,只能执行一次
    demo(); // 先执行一次,然后一秒之后才能执行第二次
    setTimeout(function(){
        lock = false;
    },1000)
}
  • 封装成函数
// 定义锁
var lock = false;
// 基于时间的节流
window.onscroll = function(){
    throttle(demo);
}

// 节流器方法
function throttle(fn){
    if (fn.__lock){
        return;
    }
    fn.__lock = true;
    fn();
    setTimeout(function(){
        fn.__lock = false;
    },1000)
}

http://www.niftyadmin.cn/n/734946.html

相关文章

阿拉玛之魂

This is a very interesting, puzzle game. Users use their bows and arrows to kill enemies to protect their castles.转载于:https://www.cnblogs.com/lyfd8/p/9416508.html

自定义事件$on, $emit, $off ,订阅消息,发布消息,注销消息

1 自定义事件 vue也实现了观察者模式,提供了订阅消息,发布消息,注销消息等方法$on(type, fn) 订阅消息方法type:消息名称, fn:消息回调函数,参数是由$emit方法传递的$emit(type, ...args) 发布消息方法type:消息名称…

Debian 8 安装 socks5 代理

2019独角兽企业重金招聘Python工程师标准>>> 安装 build工具 $ apt-get install -y gcc make build-essential libpam-dev libldap2-dev libssl-dev下载 ss5 代码 $ wget https://superb-sea2.dl.sourceforge.net/project/ss5/ss5/3.8.9-8/ss5-3.8.9-8.tar.gz 如果4…

手写promise,了解一下(二)

支持链式操作 我们平时写promise一般都是对应的一组流程化的操作,如这样: promise.then(f1).then(f2).then(f3) 但是我们之前的版本最多只能注册一个回调,这一节我们就来实现链式操作。 目标 使promise支持链式操作 实现 想支持链式操作&…

详解Object.create(null)(转载自https://juejin.cn/post/6844903589815517192)

** (转载自https://juejin.cn/post/6844903589815517192) ** Object.create()、{…}的区别 先看看我们经常使用的{}创建的对象是什么样子的: var o {a:1}; console.log(o)在chrome控制台打印如下: 从上图可以看…

域名https可以访问,http不能访问的解决方法

如果访问域名http显示拒绝连接,https显示正常,一般都是80端口被拒绝或者使用80端口的服务挂了,解决方法:重启该服务,域名显示正常转载于:https://blog.51cto.com/8999a/2155194

两种方式 : VS 如何调试dll中的源码

1.假设有两个解决方案,Server 和Common,想要调试Server引用了Common中的dll,且发现属性》调试中没有启用本地代码。但想要在引用的Common中dll中打断点。 1)将需要调试的Common中Debug生成的dll的文件以及PBD文件拷贝到Server的debug时的生成…

观察者模式,发布订阅者模式

1 观察者模式 定义:观察者模式,又叫发布订阅者模式,又叫消息系统,又叫消息机制,又叫自定义事件,解决主体与观察者之间的耦合问题。 观察者模式是一个行为型设计模式 特点: 1 解决的是耦合问题&a…