不要var
在你的函数声明中使用。只需使用:
function animate(x){
此外,对于第一个示例,您可能想要这样的东西:
function animate(x){
return function () {
function animateInner() {
$(x).effect("pulsate", { times:4 }, 5000);
setTimeout(animateInner, 10000);
}
animateInner();
};
}
$(document).ready(animate("#mydiv"));
演示:http: //jsfiddle.net/XHKbC/
否则,原始animate("#mydiv")
调用会立即执行(并且$(x)
可能找不到任何东西,因为 DOM 还没有准备好)。$(document).ready()
期望对函数的引用。你调用了一个函数。但这有点矫枉过正。只需使用:
$(document).ready(function () {
animate("#mydiv");
});
但您必须更改您的函数,以便同时setTimeout
传递以下值x
:
function animate(x){
// Do pulsate animation
$(x).effect("pulsate", { times:4 }, 5000);
// set timeout and recall after 10secs
setTimeout(function () {
animate(x);
}, 10000);
}
演示:http: //jsfiddle.net/XHKbC/2/
虽然它的代码/复杂一点,但我的第一个示例通过使用闭包x
在第二个示例中没有遇到问题(必须传入)。setTimeout
更新:
在向您展示如何使用此代码时,我将其设置如下:
function Animater(target) {
var self = this;
var animateTO;
var animateElement = target;
function animate() {
animateElement.effect("pulsate", { times:4 }, 5000);
animateTO = setTimeout(animate, 10000);
}
self.start = function () {
animate();
};
self.stop = function () {
animateElement.finish();
clearTimeout(animateTO);
};
}
并创建一个新的,例如:
var mydivAnimater = new Animater($("#mydiv"));
然后,您可以调用它,.start()
并根据需要在不同的元素上.stop()
创建任意数量的这些Animater
对象。
演示:http: //jsfiddle.net/K7bQC/3/