一个名词一个技巧之函数节流

看个实例先

  • 实现一个逻辑:当在input中输入内容的时候,将输入的内容显示到一个DIV里面
  • html 文件
<input type="text" value=""/>
<div class="inputText"></div>
  • js文件
var count = 0 
$("input").on("input",function(e){
      count && clearTimeout(count)
      count = setTimeout(function(){
           $(".inputText").html( $(e.target).val())
      }, 1000)
})

术语解释

  • 看完上面代码,你肯定在平时工作中有用到过咯(没有?怎么可能!)

函数节流

  • 定义:某个函数在一定时间间隔内只执行一次,也可以理解为把某个时间间隔内执行的函数合并为一个函数执行

定义一个节流函数

  • 定义一个函数名为throttle的函数
var count = null
function throttle (callback, delay) {
    count && clearTimeout(count)
    count = setTimeout(callback, delay)
}
$("input").on("input",function(e){
    throttle(function(){
         $(".inputText").html( $(e.target).val())
    }, 1000)
})
  • 上述函数有个问题,多了一个全局变量count,使用闭包改进一下函数
function throttle (callback, delay) {
    var count = null
    return (function() {
        count && clearTimeout(count)
        count = setTimeout(callback, delay)
    })()
}
  • 按理说这个函数已经很完美了,但是只是理论上的完美,在实际操作中会出现一种情况,如上例:输入框一直在输入文字,文字就一直不会显示出来。我们需要做一个处理:使得文字在超过某个时间间隔后要输出一次。
function throttle (callback, delay, wait) {
    var count = null
    var start = null
    return function() {
        var now = +new Date()
        var context = this
        var args = arguments
        if ( !start ) {
            start = now
        }
        if ( now - start > wait ) {
            count && clearTimeout(count)
            start = now
            callback.apply(this, args)
        } else {
            count && clearTimeout(count)
            count = setTimeout(function(){
                callback.apply(this, args)
            }, delay)
        }
    }
}
var f = throttle(function(e){
     $(".inputText").html($(e.target).val())
}, 1000, 2000)
$("input").on("input",function(e){
     f(e)
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 三、闭包和高阶函数 3.1 闭包 3.1.1 变量的作用域 所谓变量的作用域,就是变量的有效范围。通过作用域的划分...
    梁同学de自言自语阅读 1,508评论 0 6
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,964评论 2 17
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,288评论 19 139
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 2,154评论 1 10
  • 明年的六月八号下午五点。陪我三年的小伙伴你们会在哪~
    飞天小红猪pink阅读 190评论 1 1