Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript函数只在firefox上运行一次_Javascript_Jquery_Firefox - Fatal编程技术网

Javascript函数只在firefox上运行一次

Javascript函数只在firefox上运行一次,javascript,jquery,firefox,Javascript,Jquery,Firefox,我有以下javascript函数: function kitemoving() { setInterval(function(){ kite.animate({ top: '+=30' },{ duration: 1500 }); kite.animate({ top: '-=30' },{ duration

我有以下javascript函数:

function kitemoving() {
    setInterval(function(){
        kite.animate({
            top: '+=30'
        },{ 
            duration: 1500 
        });
        kite.animate({
            top: '-=30'
        },{ 
            duration: 1500
        });
    });
}
kitemoving();
这是你的电话号码


在任何地方,它都只在Mozilla Firefox上运行良好,所有使用此代码的动作只运行一次。你能帮我理解为什么吗?

为了让你的小提琴在Firefox中工作,你所要做的就是为setInterval调用提供一个间隔量


下面是一个更新的fiddle,它在Firefox中工作:

您没有指定间隔值,这就是Gecko挣扎的原因

function kitemoving() {
    setInterval(function(){
        kite.animate({
            top: '+=30'
        },{ 
            duration: 1500 
        });
        kite.animate({
            top: '-=30'
        },{ 
            duration: 1500
        });
    },300);//interval
}
kitemoving();

必须为延迟参数指定一个值

setInterval至少需要两个参数。引用

func是要重复调用的函数

delay是延迟的毫秒数(千分之一秒) setInterval函数应在每次调用func之前等待。如同 setTimeout,强制执行最小延迟

param1、param2等是附加的 传递给func指定的函数


因此,当您省略第二个参数时,您不能期望定义的行为。

不要使用间隔,您很容易使fx队列饱和。相反,请使用任何完整的动画回调,例如:

var kite = jQuery('.kite');

function kitemoving() {
    kite.animate({
        top: '+=30'
    }, {
        duration: 1500
    });
    kite.animate({
        top: '-=30'
    }, {
        duration: 1500
    }).promise().done(kitemoving);
}
kitemoving();

没有间隔时间设置奇怪的是,它不仅在mozila@AnahitDEV提供至少在其他浏览器上工作的JSFIDLE。。。无论如何,这不是你应该用间隔来设置动画的方式。在这里,您肯定会使fx队列饱和…1。将计时器添加到setInterval。2.使用位置:绝对位置;在图像上。检查@Tushar我建议使用CSS动画:至少将规则设置为3000ms以上,否则这只是不必要地增加动画队列深度。递归setTimeout比interval好吗?如果是这样的话,原因是:很抱歉出现了离题qn。@vtz Ya递归超时在case OP中会更好,出于某种奇怪的原因,不会使用动画回调
var kite = jQuery('.kite');

function kitemoving() {
    kite.animate({
        top: '+=30'
    }, {
        duration: 1500
    });
    kite.animate({
        top: '-=30'
    }, {
        duration: 1500
    }).promise().done(kitemoving);
}
kitemoving();