Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.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 即使条件不满足,jqueryanimate也会执行_Javascript_Jquery_Html_Jquery Animate_Settimeout - Fatal编程技术网

Javascript 即使条件不满足,jqueryanimate也会执行

Javascript 即使条件不满足,jqueryanimate也会执行,javascript,jquery,html,jquery-animate,settimeout,Javascript,Jquery,Html,Jquery Animate,Settimeout,正如有人在中建议我的那样,我使用jquery是为了进行div移动。 现在我想让它在左边距达到200像素时停止。 为此,我使用以下代码: var超时=100; var宽度=200; var高度=500; var Howmole=0; 函数移动之前{ 多少=在+5之前; $obj.animate{'marginLeft':'+='+多少+'px'}; 如果宽度小于多少{ setTimeoutfunction{ 搬家多少钱 },超时; } 否则{alert'finished'; } } setTim

正如有人在中建议我的那样,我使用jquery是为了进行div移动。 现在我想让它在左边距达到200像素时停止。 为此,我使用以下代码:

var超时=100; var宽度=200; var高度=500; var Howmole=0; 函数移动之前{ 多少=在+5之前; $obj.animate{'marginLeft':'+='+多少+'px'}; 如果宽度小于多少{ setTimeoutfunction{ 搬家多少钱 },超时; } 否则{alert'finished'; } } setTimeoutfunction{ 搬家多少钱 },超时; obj{ 背景色:红色; 宽度:100px; 高度:100px; 左边距:0px; }
我觉得你把事情弄得有点复杂了。只需将div position设置为relative并设置left属性的动画,如下所示:

我认为您使事情变得有点复杂。只需将div position设置为relative并设置left属性的动画,如下所示:

您不需要超时循环:

var howmuch = 200;
var duration = 4000; // = 200 / 5 * 100 from OP
function move() {
    $("#obj").animate({'marginLeft' : '+=' + howmuch + 'px' }, duration);
}
move();

您的示例似乎没有停止,因为您已经启动了许多动画。

您不需要超时循环:

var howmuch = 200;
var duration = 4000; // = 200 / 5 * 100 from OP
function move() {
    $("#obj").animate({'marginLeft' : '+=' + howmuch + 'px' }, duration);
}
move();

您的示例似乎并没有停止,因为您已经开始了许多动画。

这是因为您的动画会在每个循环中增加更大的值,而不是像您的意图所建议的那样增加5

$("#obj").animate({'marginLeft' : '+=' + howmuch + 'px' } );
所以第一个循环移动边际左+5,下一个循环再移动+10,总共15,然后再移动+15,总共30。。。这样做大约40次,你会得到一个非常大的数字。。。请尝试改用常量递增器:

$("#obj").animate({'marginLeft' : '+=' + 5 + 'px' } );

还请注意,递增循环以100ms的速率重复,但实际动画需要更长的时间,因为您没有提供持续时间,因此在动画完成之前,您仍然会收到警报。

这是因为每个循环的动画增量更大,而不是像你的意图所暗示的那样不断增加5

$("#obj").animate({'marginLeft' : '+=' + howmuch + 'px' } );
所以第一个循环移动边际左+5,下一个循环再移动+10,总共15,然后再移动+15,总共30。。。这样做大约40次,你会得到一个非常大的数字。。。请尝试改用常量递增器:

$("#obj").animate({'marginLeft' : '+=' + 5 + 'px' } );

还请注意,增量循环以100ms的速率重复,但实际动画需要更长的时间,因为您没有为其提供持续时间,因此您仍然会在其完成动画制作之前收到警报。

正如其他人所指出的,这比您的示例简单得多。不过,您的动画不起作用的原因是,在动画中,您每次添加多少,即增加到200。所以你要增加你的左边距+5,+10,+15…+195。如果你把所有的加起来,它的总能量达到4000像素,也就是它停止的地方。正确的动画应该是:

$("#obj").animate({'marginLeft' : '+=' + 5 + 'px' } );

正如其他人所指出的,这比你的例子简单得多。不过,您的动画不起作用的原因是,在动画中,您每次添加多少,即增加到200。所以你要增加你的左边距+5,+10,+15…+195。如果你把所有的加起来,它的总能量达到4000像素,也就是它停止的地方。正确的动画应该是:

$("#obj").animate({'marginLeft' : '+=' + 5 + 'px' } );

问题是jQuery的动画制作需要一定的时间才能完成,并且您不允许在开始另一个动画之前完成一个动画。你也在增加利润。不是增加5px,而是增加先前的保证金金额和额外的5px。要在循环中完成多个动画,需要分配回调。在这里拉小提琴:


问题是jQuery的动画制作需要一定的时间才能完成,并且您不允许在开始另一个动画之前完成一个动画。你也在增加利润。不是增加5px,而是增加先前的保证金金额和额外的5px。要在循环中完成多个动画,需要分配回调。在这里拉小提琴:


每次在循环中,您都会以当前的边距递增

howmuch = before + 5;
在这里,您可以计算当前边距,因此将“动画”更改为将marginLeft设置为“多少”,而不是按“多少”递增:

$("#obj").animate({'marginLeft' : howmuch + 'px' } );

每次在循环中,您都会以当前的边距递增

howmuch = before + 5;
在这里,您可以计算当前边距,因此将“动画”更改为将marginLeft设置为“多少”,而不是按“多少”递增:

$("#obj").animate({'marginLeft' : howmuch + 'px' } );

两条评论:您应该有其他问题,而不是发布新问题,但是如果您要发布新问题,您应该提供指向其他问题的链接。@Goodword感谢您指出这一点,我将链接我的问题,但不包括具体问题,这只是关于如何使用jquery移动div,而不是如何在到达确定位置时使其停止。我应该编辑旧问题吗?两条评论:你应该有其他问题,而不是发布新问题,但是如果你要发布新问题,你应该提供一个指向其他问题的链接。@Goodword tha
nks指出,我将把我的问题联系起来,但它没有包括那个具体的问题,它只是关于如何使用jquery移动div,而不是如何在到达确定位置时使其停止。我是否应该编辑旧问题?谢谢你的回答。是否可以使用此选项设置动画完成所需的时间?谢谢您的回答。是否可以使用此选项设置动画完成所需的时间?感谢您的回答,我认为我必须指定从左边距开始的像素数,而不是实际位置。如果我使用你发布的代码,一切正常!谢谢你的回答,我想我必须指定左边距的像素数,而不是实际位置。如果我使用你发布的代码,一切正常!谢谢你的回答,我想我必须指定左边距的像素数,而不是实际位置。如果我使用你发布的代码,一切正常!谢谢你的回答,我想我必须指定左边距的像素数,而不是实际位置。如果我使用你发布的代码,一切正常!谢谢你的回答,我想我必须指定左边距的像素数,而不是实际位置。如果我使用你发布的代码,一切正常!谢谢你的回答,我想我必须指定左边距的像素数,而不是实际位置。如果我使用你发布的代码,一切正常!