js 去抖技术应用例子

js 去抖技术的话, 一百度下来, 都是比较简单的代码示例,可是 看起来,都不知道怎么引用,有点难下手。javascript

并且对它的原理也不是很明白。html

例子:java

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
</script>
<script>
$(document).ready(function(){
  $("p").click(
  	 debounce(function (event) {//被代理的方法,须要执行的方法
     // 能够使用 arguments 来获取 去抖技术返回的 方法参数 
     alert(222222);
		}, 250)
	  
  	);
	
});
	
function debounce(fn, delay) {
  var timer = null;
  return function () {
    var context = this, args = arguments;//arguments值得的是 这个方法的参数
    clearTimeout(timer);
    timer = setTimeout(function () {
      //代理方法执行 , args 实际上是一个数组,放入的是,被代理方法的参数,能够在这里进行设置参数
      // 好比  args=['aa'];
      fn.apply(context, args);
    }, delay);
  };
}

</script>
</head>
<body>
<p>若是你点我,我就会消失。</p>
<p>继续点我!</p>
<p>接着点我!</p>
</body>
</html>

使用到了定时器, 这个很容易看明白。 jquery

上例子中就是 点击的时候, 返回一个定时器方法,在定时器里面,代理执行传入的方法 fn .数组

也就是 去抖技术,会返回 最后一次 操做 须要执行的方法。 而后该方法会定时自动执行。app

使用到了 比较原生的js 技术, 百度一下 apply , arguments  等 即很容易看明白了this

 

总结代理

去抖技术的 核心思想就是 定时器的使用。 code

若是再次 执行方法的时候,定时器存在,就去掉,而后新建一个 定时器对象。cdn

这样就会每次都是会执行最新的操做了。

因此就算不用 去抖技术的 demo代码, 单单使用定时器去控制, 均可以 实现同样的效果

相关文章
相关标签/搜索