博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数节流
阅读量:5009 次
发布时间:2019-06-12

本文共 1467 字,大约阅读时间需要 4 分钟。

此文章只为了帮助自己记忆 。

以下场景往往由于事件频繁被触发,因而频繁执行DOM操作、资源加载等重行为,导致UI停顿甚至浏览器崩溃。

  1. window对象的resize、scroll事件

  2. 拖拽时的mousemove事件

  3. 射击游戏中的mousedown、keydown事件

  4. 文字输入、自动完成的keyup事件

 

实际上对于window的resize事件,实际需求大多为停止改变大小n毫秒后执行后续处理;而其他事件大多的需求是以一定的频率执行后续处理。针对这两种需求就出现了throttle。

 方法1:全部东西合并成一个。

var debounce = function(idle, action){  var last  return function(){    var ctx = this, args = arguments    clearTimeout(last)    last = setTimeout(function(){        action.apply(ctx, args)    }, idle)  }}

方法2:方法1的加强版,让时间累积到一个值,马上触发。

function throttle(fn,delay,mustDoTime){            var last;            var id;            return function(){                var current = +new Date();                var args = arguments;                var $this = this;                clearTimeout(id);                //第一次时间是一样的                if(!last){                    last = current;                }                //时间超过了必须执行的时间,就直接执行                if(current - last >= mustDoTime){                    fn.apply($this,args);                    last = current;                }else{                    id = setTimeout(function(){                        fn.apply($this,args);                    },delay);                }            }        }        var obj = {name:"大叔"};        var test = throttle(function(){            console.log(this.name);        },100,100);        for(var index = 0;index < 10000;index ++){            test.call(obj);        }

 

转载于:https://www.cnblogs.com/geilishu/p/5232591.html

你可能感兴趣的文章
js学习总结----DOM增删改和应用
查看>>
希尔伯特矩阵(Hilbert matrix)
查看>>
1)对于键相等数组相加
查看>>
5)二叉树
查看>>
(20)sopel算法
查看>>
学习总结 javascript 闭包
查看>>
实验吧一个小坑注入
查看>>
Centos 6.5使用Bumblebee关闭N卡,冷却你的电脑
查看>>
【 D3.js 高级系列 — 8.0 】 打标
查看>>
Mac必备软件推荐
查看>>
Android Gson深入分析
查看>>
display:flow-root
查看>>
判读字符串是否为空的全局宏-分享
查看>>
JVM线程安全
查看>>
gvim 7.3 for ubuntu 12.04
查看>>
异常处理: 重载Throwable.fillInStackTrace方法已提高Java性能
查看>>
Androdi_4_"No target device found."——Android Studio真机测试中遇到的问题
查看>>
SimpleDataFormat将string类型变成data型数据
查看>>
Data Flow ->> Multicast
查看>>
虚拟机类加载机制(1)——类加载时机
查看>>