javascript函数节流(throttle)与函数去抖(debounce)

throttle 等时间 间隔执行函数。

debounce 时间间隔 t 内若再次触发事件,则重新计时,直到停止时间大于或等于 t 才执行函数。

1、throttle函数的简单实现

function throttle(fn, threshhold, scope) {
    threshhold || (threshhold = 250);
    var last, timer;
    return function () {
        var context = scope || this;
        var now = +new Date(),
            args = arguments;
        if (last && now - last + threshhold < 0) {
            // hold on to it
            clearTimeout(deferTimer);
            timer = setTimeout(function () {
                last = now;
                fn.apply(context, args);
            }, threshhold);
        } else {
            last = now;
            fn.apply(context, args);
        }
    };
}

//调用方法
$(‘body‘).on(‘mousemove‘, throttle(function (event) {
    console.log(‘tick‘);
}, 1000));

2、debounce函数的简单实现

function debounce(fn, delay) {
    var timer = null;
    return function () {
        var context = this,
        args = arguments;
        clearTimeout(timer);
        timer = setTimeout(function () {
            fn.apply(context, args);
        }, delay);
    };
}

//调用方法
$(‘input.username‘).keypress(debounce(function (event) {
// do the Ajax request
}, 250));

转自:http://www.cnblogs.com/fsjohnhuang/p/4147810.html

时间: 2024-10-24 23:27:40

javascript函数节流(throttle)与函数去抖(debounce)的相关文章

函数节流 throttle

/* * throttle */ var throttle = function (fn, interval) { var __self = fn // 保存需要被延迟执行的函数引用 var timer // 定时器 var firstTime = true // 是否是第一次调用 return function () { var args = arguments var __me = this if (firstTime) { // 如果是第一次调用,不需延迟执行 __self.apply(_

微信小程序:防止多次点击跳转(函数节流)

场景 在使用小程序的时候会出现这样一种情况:当网络条件差或卡顿的情况下,使用者会认为点击无效而进行多次点击,最后出现多次跳转页面的情况,就像下图(快速点击了两次): 解决办法 然后从 轻松理解JS函数节流和函数防抖 中找到了解决办法,就是函数节流(throttle):函数在一段时间内多次触发只会执行第一次,在这段时间结束前,不管触发多少次也不会执行函数. /utils/util.js: function throttle(fn, gapTime) { if (gapTime == null ||

函数节流和函数去抖

函数节流和函数防抖,两者都是优化高频率执行js代码的一种手段. 以下场景往往由于事件频繁被触发,因而频繁执行DOM操作.资源加载等重行为,导致UI停顿甚至浏览器崩溃. 1. window对象的resize.scroll事件 2. 拖拽时的mousemove事件 3. 射击游戏中的mousedown.keydown事件 4. 文字输入.自动完成的keyup事件 实际上对于window的resize事件,实际需求大多为停止改变大小n毫秒后执行后续处理:而其他事件大多的需求是以一定的频率执行后续处理.

js的函数节流(throttle)

什么是函数节流? 介绍前,先说下背景.在前端开发中,有时会为页面绑定resize事件,或者为一个页面元素绑定拖拽事件(其核心就是绑定mousemove),这种事件有一个特点,就是用户不必特地捣乱,他在一个正常的操作中,都有可能在一个短的时间内触发非常多次事件绑定程序.而大家知道,DOM操作时很消耗性能的,这个时候,如果你为这些事件绑定一些操作DOM节点的操作的话,那就会引发大量的计算,在用户看来,页面可能就一时间没有响应,这个页面一下子变卡了变慢了.甚至在IE下,如果你绑定的resize事件进行

浅谈javascript的函数节流

什么是函数节流? 介绍前,先说下背景.在前端开发中,有时会为页面绑定resize事件,或者为一个页面元素绑定拖拽事件(其核心就是绑定mousemove),这种事件有一个特点,就是用户不必特地捣乱,他在一个正常的操作中,都有可能在一个短的时间内触发非常多次事件绑定程序.而大家知道,DOM操作时很消耗性能的,这个时候,如果你为这些事件绑定一些操作DOM节点的操作的话,那就会引发大量的计算,在用户看来,页面可能就一时间没有响应,这个页面一下子变卡了变慢了.甚至在IE下,如果你绑定的resize事件进行

[概念] js的函数节流和throttle和debounce详解

js的函数节流和throttle和debounce详解:同样是实现了一个功能,可能有的效率高,有的效率低,这种现象在高耗能的执行过程中区分就比较明显.本章节一个比较常用的提高性能的方式,通常叫做"函数节流",下面就通过代码实例对此做一下介绍.一.函数节流是什么:在实际编码中,mousemove和resize是使用非常频繁的事件类型(当然还有其他类似事件类型),这样的事件有一个共同的特点,就是在一个普通的操作中,就有可能会在极短的时间内多次执行事件处理函数,会极大的损耗性能,比如resi

js 函数的防抖(debounce)与节流(throttle)

原文:函数防抖和节流: 序言: 我们在平时开发的时候,会有很多场景会频繁触发事件,比如说搜索框实时发请求,onmousemove, resize, onscroll等等,有些时候,我们并不能或者不想频繁触发事件,咋办呢?这时候就应该用到函数防抖和函数节流了! 准备材料: <div id="content" style="height:150px;line-height:150px;text-align:center; color: #fff;background-col

JavaScript函数节流

函数节流 技术一般水平有限,有什么错的地方,望大家指正. 函数节流就是节约函数的调用,让函数少执行几次,一般用在onmousemove,onresize这种我们只要稍微一动就会砰砰砰执行多次的事件处理函数上.如果处理函数很复杂有执行很多次就很耗性能关键了有的是没有必要执行的. 我们先说一个经常遇见的情况,鼠标放在按钮上显示下拉菜单,鼠标离开下拉菜单消失,通常我们这么写: //title表示标题元素,content表示下拉菜单 $("#title").hover(function(){

JS函数节流

背景:在前端开发中,有时会为页面绑定resize事件,或为一个页面元素拖拽事件(其核心就是绑定mousemove)在一个正常操作中也有可能在一个短时间内触发非常多次事件绑定程序,而DOM操作是很消耗性能的,如果为这些事件绑定一些操作DOM节点的操作的话就会引发大量的计算,在用户看来页面可能就一时间没有响应,这个页面就变卡变慢了,甚至在IE下,如果绑定的resize事件进行较多DOM操作,其高频率可能直接就使得浏览器崩溃.函数节流简单讲就是让一个函数无法在很短的时间间隔内连续调用,只有当上一次函数

Underscore.js 函数节流简单测试

函数节流在日常的DOM界面数据交互中有比较大的作用,可以减少服务器的请求,同时减少客户端的内存影响 Underscore.js  本省就包含了函数节流的处理函数 _.throttle 和 _.debounce 简单的测试使用如下: 需要使用的类库为jquery  .Underscore 测试的方法为:mousemove 事件 测试页面代码如下: <!DOCTYPE html > <html> <head> <script src="jquery-1.11