前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手动实现函数节流(throttle)

手动实现函数节流(throttle)

作者头像
我乃小神神
发布2020-05-18 16:01:39
2940
发布2020-05-18 16:01:39
举报
文章被收录于专栏:前端基础前端基础
代码语言:javascript
复制
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	/*
	* 函数节流
	* 简单地讲,就是让一个函数无法在很短的时间间隔内连续调用,只有当上一次函数执行后过了你规定的时间间隔,、
	* 
    */
	<body>
		<script>
			function throttle(fn,incomingTime){
				let time=''
				return function(){
					let calculateTime= + new Date()
					if(calculateTime -time>incomingTime|| !time){
						fn()
						time=calculateTime
					}
				}
			}
			let fn=()=>{
				console.log("大哥好")
			}
			setInterval(throttle(fn,1000),1000)

       function throttle(fn) {
      let canRun = true; // 通过闭包保存一个标记
      return function () {
        if (!canRun) return; // 在函数开头判断标记是否为true,不为true则return
        canRun = false; // 立即设置为false
        setTimeout(() => { // 将外部传入的函数的执行放在setTimeout中
          fn.apply(this, arguments);
          // 最后在setTimeout执行完毕后再把标记设置为true(关键)表示可以执行下一次循环了。
          //当定时器没有执行的时                     候标记永远是false,在开头被return掉
          canRun = true;
        }, 500);
      };
    }
    function sayHi(e) {
      console.log(e.target.innerWidth, e.target.innerHeight);
    }
    window.addEventListener('resize', throttle(sayHi));

		</script>
	</body>
</html>

每一秒钟打印一次 大哥好

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档