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/
もう少しコード/複雑ですが、クロージャーを使用することで、最初の例では 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()
その後、それに対してandを呼び出すことができ、必要に応じてさまざまな要素.stop()
にこれらのAnimater
オブジェクトをいくつでも作成できます。
デモ: http://jsfiddle.net/K7bQC/3/