Remy Sharp's功能节流器
Remy Sharp's function throttler
试图使用Remy Sharp (http://remysharp.com/2010/07/21/throttling-function-calls/)创建的节流功能…它的标准用法如下:
$('.thing').click(throttle(function() {
console.log('api call');
}, 300);
这是相当整洁,但我希望能够节流一个函数内的代码的特定部分,而不是整个点击事件,像这样:
$('.thing').click(function() {
console.log('hello!');
throttle(function() {
console.log('api call');
}, 300);
});
但是我不太明白为什么它不起作用。节流代码返回一个函数,所以如果我继续使用.apply(this, arguments);
进行节流调用,然后键入'hello',该函数被调用5次而不是一次,因为节流函数内的计时器没有被覆盖。
筛选了jQuery点击代码,但没有找到任何东西。我猜jQuery创建了它的一个实例然后调用相同的实例所以有相同的计时器吗?
有人明白这一点吗?为什么会这样?
你做错了;-)
下面是jsbin的解决方案:http://jsbin.com/elabul/edit
throttle
方法返回一个函数,该函数将限制调用它的次数。因此,您需要在一个变量中捕获这个坏小子,并在单击处理程序中调用它,如下所示:
var inputThrottle = throttle(function () {
console.log('api call');
}, 250);
$('input').keyup(function () {
console.log('test');
inputThrottle();
});
您需要调用从油门函数返回:
$('.thing').click(function() {
console.log('hello!');
(throttle(function() {
console.log('api call');
}, 500))();
});
只是调用throttle不做任何事情,您需要将函数作为函数返回给单击处理程序:
$('.thing').click((function() {
console.log('hello!');
return throttle(function() {
console.log('api call');
}, 300);
}()));
相关文章:
- 添加文字和评论功能更新Div
- JavaScript打印功能使日历停止工作
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 如何防止网页加载后自动启动功能
- 除修剪外的其他功能
- 悬停功能触发器
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 删除CKEditor工具栏按钮,但不删除功能
- 异步facebook功能
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- jQuery滚动功能只工作一次
- Graphiti中是否有任何工具提示功能
- React redux初始化功能,无论状态变化如何
- 在哪里可以学习ECMAScript标准中尚未包含的JavaScript功能
- 正在获取select上的功能id
- Rhino打印功能
- 使用(navigator.geolocation)检测浏览器功能错误
- 主体单击删除功能上的输入框宽度
- JQuery使用相同的功能自动完成各种输入文本
- Remy Sharp's功能节流器