我认为有更好的方法可以做到这一点,也许有人可以指出我的错误。 我通过向上和向下计数来激励box-shadow blur css属性,让函数在启动后调用它自己。
由于某种原因,我无法将参数传递给第一次传递的setTimeout调用。
关于如何更清晰地写这个的任何想法? 它可以工作,但是甚至可以将其概括为动画其他css属性。
var pulseBoxShadowBlurCounter = 0;
var pulseBoxShadowBlurDirection;
$(document).ready(function() { // dom binds
pulseBoxShadowBlur($('#getData-btn'),14,'#fff',100); // start the process
});
function pulseBoxShadowBlur(pulseElement,max,color,delayTime){
var cssInput = '0px 0px '+pulseBoxShadowBlurCounter+'px '+color;
$(pulseElement).css('box-shadow', cssInput);
if(pulseBoxShadowBlurCounter == max){
pulseBoxShadowBlurDirection = 1; // backwards
}
if(pulseBoxShadowBlurCounter == -5){ // negative num for pause at 0 time
pulseBoxShadowBlurDirection = 0; // forward
}
if(pulseBoxShadowBlurDirection == 0){
pulseBoxShadowBlurCounter++;
}else{
pulseBoxShadowBlurCounter--;
}
setTimeout( "pulseBoxShadowBlur($('#getData-btn'),14,'#fff',100);",delayTime ); // loop
}
答案 0 :(得分:4)
你可以:
setTimeout(function() { pulseBoxShadowBlur(element, max, color, delayTime); }, delayTime);
通常,将某些JavaScript代码的字符串版本作为setTimeout()
或setInterval()
的第一个参数传递是一个坏主意。传递一个函数。
答案 1 :(得分:1)
你必须在闭包中这样做:
setTimeout( function() {
pulseBoxShadowBlur($('#getData-btn'),14,'#fff',100);
}),delayTime );
答案 2 :(得分:1)
由于您使用的是jQuery,因此可以delay
使用queue
,如下所示:
$('#getData-btn').delay(delayTime).queue(function(next) {
pulseBoxShadowBlur($(this),14,'#fff',100);
next(); // resume queue
});