什么'这是停止递归回调的最佳方法
What's the best way to stop a recursive callback?
我正在尝试使用jquery库"jquery.transit"进行元素抖动,这是代码。
var s = $('myele');
var randomTran = function(){
var rh = Math.floor((Math.random() * 10) - 5),
rv = Math.floor((Math.random() * 10) - 5);
s.transit({x:rh,y:rv},50,randomTran)
}
问题是元素会不断抖动,我需要在递归回调中添加一些停止符号。我能想到的是在函数外设置一个变量作为标志。
var s = $('myele');
var flag = 0;
var randomTran = function(){
if (flag<6) {
var rh = Math.floor((Math.random() * 10) - 5),
rv = Math.floor((Math.random() * 10) - 5);
s.transit({x:rh,y:rv},50,randomTran)
};
flag++;
}
但有了这个,我闻到了全球变量的恶臭。那么问题1有更好的方法吗?问题2:有没有什么插件可以让元素抖动?
您可以在没有全局的情况下做同样的事情:
var randomTran = function(flag){
flag = flag || 0;
if (flag<6) {
var rh = Math.floor((Math.random() * 10) - 5),
rv = Math.floor((Math.random() * 10) - 5);
s.transit({x:rh,y:rv},50,randomTran.bind(this, ++flag))
};
}
除了s
之外,它不依赖于任何外部变量,而且在编写时,不需要修改任何其他代码。
为什么要将其全局化?您可以简单地将其附加到s
对象。
var s = $('myele');
s.shakesLeft = 10;
var randomTran = function() {
if (s.shakesLeft--) {
var rh = Math.floor((Math.random() * 10) - 5),
rv = Math.floor((Math.random() * 10) - 5);
s.transit({x:rh,y:rv},50,randomTran)
}
}
相关文章:
- 递归回调
- 带有回调的Javascript对象方法中的递归
- jQuery.fadeIn()和.fadeOut()回调在将代码重写为递归回调后无法正常工作
- 使用回调的递归Javascript函数不起作用
- 递归和传递 Ajax 回调
- 使用递归函数按顺序执行多个 ajax 请求,并在所有请求完成后执行回调函数
- 回调函数中的递归
- 如何"递归AJAX回调”;在JavaScript工作中
- 递归回调机制
- 什么'这是停止递归回调的最佳方法
- backbone.js集合-如何为fetch定义成功回调(不过是递归的)
- 如何在node.js中通过API回调异步递归
- 如何在异步递归方法完全就绪时创建回调
- 在递归函数中不能调用回调函数
- 节点集上的递归回调
- 使用回调来减慢循环的函数在递归使用时会变得混乱
- 对递归函数的回调
- 在非阻塞回调函数中递归调用父函数
- 如何处理节点中的递归回调
- 在javascript中,使用回调函数递归地进行循环控制是很危险的