Javascript&;jQuery:如何通过动画回调使函数无限大?
有一个类Javascript&;jQuery:如何通过动画回调使函数无限大?,javascript,jquery,this,Javascript,Jquery,This,有一个类Abon的对象,然后我希望这个对象在页面上移动 a = new Abon(); a.init(); a.move(); 方法move()包含: function abon_move () { var x = this.x; var y = this.y; var direction_x = Math.random()*5 - 5; var direction_y = Math.random()*5 - 5; var x_new = x + direction_x
Abon
的对象,然后我希望这个对象在页面上移动
a = new Abon();
a.init();
a.move();
方法move()
包含:
function abon_move () {
var x = this.x;
var y = this.y;
var direction_x = Math.random()*5 - 5;
var direction_y = Math.random()*5 - 5;
var x_new = x + direction_x * this.movement_rate;
var y_new = y + direction_y * this.movement_rate;
console.log(x_new+" "+y_new)
$(".abonent."+this.id).animate( {
left:+x_new,
top:+y_new
}, 'slow', "linear", function() { this.move() });
}
我想要的就是在动画
停止后,方法移动
(表示为函数abon_move()
)一次又一次地重复。但问题是回调中显示的this.move()
与我的对象没有连接,因为this
在该位置指向jQuery选择的HTML元素
UPD:
实际方法相同,但在animate
然后,我尝试执行以下操作:
setInterval( a[0].move , 300); //doesn't work - says `this` members are undefined
setInterval( a[0].move() , 300); //works only one time and stops
谢谢你的帮助 将函数
abon\u move()
包装在setTimeout
调用中,例如:setTimeout(abon\u move,300)代码>因此它将每300毫秒运行一次。尝试以下操作:
function abon_move () {
var x = this.x;
var y = this.y;
var class = this;
...
}
然后,在jQueryanimate
中,您可以使用变量class
引用您的类,实际上将有一个对象数组。我现在真的不明白。我创建了另一个方法,它包含:setTimeout(abon_move,300)代码>仅,并且abon\u move()
不起作用,因为我没有连接到此
确定,但将move函数放在abon中。例如Abon.prototype.move=function(){}
。然后您就可以访问此
。然后将计时器作为事件循环执行,例如setTimeout(function(){for(a in-array_of_abons){a.move();},300)
。试过了,没有结果。你能看一下我在原始消息中发布的更新吗?我正在寻找=)事实上,我犯了一个错误。我相信class
在JS中是一个保留关键字,但你可以使用任何其他名称。哦,我认为有必要使用class
,不管怎样,它还是有效的,谢谢=)
function abon_move () {
var x = this.x;
var y = this.y;
var class = this;
...
}