jQuery delay()-如何停止它?

jQuery delay()-如何停止它?,jquery,delay,settimeout,jquery-animate,Jquery,Delay,Settimeout,Jquery Animate,我已经尝试了stop(true,true)、stop(true)和clearQueue();但这不起作用 function reset(){ $('div').clearQueue(); $('#img').html('').css({'left':0,'right':0,'opacity':1,'z-index':1}); $('#img2').html('').css({'left':0,'right':0,'opacity':1,'z-index':1}); $('

我已经尝试了stop(true,true)、stop(true)和clearQueue();但这不起作用

function reset(){
   $('div').clearQueue();
   $('#img').html('').css({'left':0,'right':0,'opacity':1,'z-index':1});
   $('#img2').html('').css({'left':0,'right':0,'opacity':1,'z-index':1});
   $('#place').html('');$('#place').html('<div id="img"></div><div id="img2"></div>');
}
我有快速更换幻灯片的问题,我已经有一些功能,必须重置所有内容,但它不起作用

function reset(){
   $('div').clearQueue();
   $('#img').html('').css({'left':0,'right':0,'opacity':1,'z-index':1});
   $('#img2').html('').css({'left':0,'right':0,'opacity':1,'z-index':1});
   $('#place').html('');$('#place').html('<div id="img"></div><div id="img2"></div>');
}
函数重置(){
$('div').clearQueue();
$('#img').html('').css({'left':0,'right':0,'opacity':1,'z-index':1});
$('#img2').html('').css({'left':0,'right':0,'opacity':1,'z-index':1});
$('#place').html('');$('#place').html('');
}
但我认为这不会停止(或删除)动画上的delay()函数。所以我不知道我是否需要使用setTimeout函数

下面是一段动画脚本:

reset();
actual_slide=2;
  $('#img').html('<img src="'+image[4]+'" alt="Obrázek">').css({'opacity':0,'z-index':2}).delay(time_delay/5).fadeTo(time_fast,1).delay(time_delay*2).fadeTo(time_fast,0);
  $('#img2').html('<img src="'+image[3]+'" alt="Obrázek">').css({'opacity':'0','top':0}).fadeTo(time_fast,1).animate({'top':'-495'},time_delay*3,function(){
    if(actual_slide==2){$('#img2').css({'top':0}).fadeTo(time_fast*2,0).html('');}else{reset();}
    if(actual_slide==2){$('#img').html('<img src="'+image[3]+'" id="1" alt="Obrázek">').fadeTo(time_fast*2,'1').css({'left':-300,'top':-700}).animate({'left':-900,'top':-700},time_delay*2);}else{reset();}
    if(actual_slide==2){$('#1').css({'width':1365,'height':1200}).animate({'width':1665,'height':1400},time_delay*2);}else{reset();}
  });                          
reset();
实际滑动=2;
$('#img').html('').css({'opacity':0,'z-index':2}).delay(time#delay/5).fadeTo(time#fast,1.delay(time#delay*2.fadeTo(time#fast,0);
$('img2').html('').css({'opacity':'0','top':0}).fadeTo(time\u fast,1).动画({'top':'-495'),time\u delay*3,function(){
如果(实际幻灯片==2){$('#img2').css({'top':0}).fadeTo(time_fast*2,0).html('');}否则{reset();}
如果(实际幻灯片==2){$('#img').html('').fadeTo(time_fast*2,'1').css({'left':-300,'top':-700})。动画({'left':-900,'top':-700},time_delay*2);}否则{reset()}
如果(实际幻灯片==2){$('#1').css({'width':1365,'height':1200}).animate({'width':1665,'height':1400},time#delay*2);}否则{reset();}
});                          
在重复该功能之前,实际的\u幻灯片必须对其进行保护,但这也不起作用。。问题是当我快速更改幻灯片时,因为重置不会停止一切,它会开始做我不想做的事情(例如将图片更改为其他和其他)。

从jQuery页面:

.delay()方法最适合在排队的jQuery之间进行延迟 影响。因为它是有限的,例如,它不能提供一种 取消延迟-.delay()不是JavaScript的本机 setTimeout函数,可能更适合某些用途 案例

看看这个插件;它可能就是你正在寻找的

我希望这有帮助

可以通过.dequeue()函数中断.delay()

下面是一个例子

//this is only for make sure that we skip 'delay', not other function
var inDelay = false;

function start()
{
    $('.gfx').animate
    ({
        width: 100
    }, function(){inDelay = true}).delay(3000).animate
    ({
        width: 0
    }, function(){inDelay = false})
}

function breakTheDelay()
{
    if(inDelay)
    {
        $('.gfx').dequeue();
    }
}

//编辑:更复杂的例子提供了日志时间戳和清理(没有清理,多次单击
Start
是不可预测的),以证明它是有效的

或以下

//这只是为了确保跳过'delay',而不是其他函数
var inDelay=假;
var-ltime=0;
//控制台日志将始终显示“结束”值:2000、1000和400
//由于在调用函数时浪费了时间,因此值可能不同
//有时延迟会缩短0-200ms,这可能是由js引擎造成的
函数start()
{
清理();
时间=(1*新日期());
$('.gfx')。队列('fx',函数(下一个)
{
日志时间(“动画1_开始”);
$('.gfx')。设置动画
({
宽度:100
},2000,函数(){logtime('animate1_end');inDelay=true;})
next();
})
.queue('fx',函数(下一个)
{
日志时间(“延迟启动”);
下一个()
})
.延迟(1000)
.queue('fx',函数(下一个)
{
日志时间(“延迟结束”);
下一个()
})
.queue('fx',函数(下一个)
{
日志时间(“动画0_开始”);
$('.gfx')。设置动画
({
宽度:0
},function(){logtime('animate0_end');inDelay=false;})
下一个()
});
}
函数清理()
{
//删除当前队列
$('.gfx').clearQueue()
//首先设置跑步间隔的动画。停止
.停止
//重置元素的宽度
.css('width',0)
}
函数日志时间(名称)
{
变量ntime=(1*新日期());
log(名称+':'+(ntime-ltime));
时间=时间;
}
函数breakTheDelay()
{
if(inDelay)
{
$('.gfx').dequeue();
}
}
//
//只有在您知道自己在做什么的情况下,才可以使用不带“inDelay”检查的版本
// http://jsfiddle.net/wasikuss/hkw9H/
//
.gfx
{
背景:红色;
宽度:0;
高度:10px
}

开始
等不及了!

< />代码> 我想让用户快速重启动画链,有时在动画的中间。因此,我没有使用
delay()
而是设置了一个伪css属性
{“null”:1}
。这里有一个简单的淡入/淡出。似乎对我有用

//- fade in
$el.stop().animate({"opacity":1}, 200, "easeInSine", function(){
    //- delay for 2000ms
    $el.stop().animate({"null":1}, 2000, function(){
        //- fade out
        $el.stop().animate({"opacity":0}, 1000, "easeInOutSine", function(){
            //- final callback
        });
    });
});

Via有一个非常简单的方法,就是使用
.animate
代替
.delay

——看起来他们已经在jQuery 1.7候选发行版中解决了这个问题。下载它,看看它是否解决了您的问题,或者阅读错误报告,了解一些可能的解决方法。另外:我刚刚尝试了它,它与jQuery 1.8.3兼容。感谢您的回答,我尝试了正常设置超时,现在它几乎可以工作了。但现在我必须以某种方式同步两个计时器,我不明白为什么jquerystop方法不能同时停止延迟+1尽管如此-使用doTimeout插件解决了我的问题。当尝试将setTimeout与队列和动画一起使用时出现问题,因为requestAnimationFrame两者可能会不同步。如果使用此插件,您将看到“出列”会取消延迟的最终结果,但不会取消延迟。在所示示例中,您可以取消动画,但如果在3秒内再次单击,则延迟仍在运行,动画将再次取消。否!如果在动画过程中单击“不能等待!”然后单击“开始”,它将无法按预期工作。等待动画完成,然后在延迟期间按“不能等待!”和“开始”。它应该一次又一次地将动画宽度设置为100px。不,这不完全起作用,只需快速单击这两个按钮几次,而不是单击“开始”,动画将不会等待适当的时间,并且会很快地来回移动,或者有一些奇怪的延迟。这个答案不正确。。。延迟没有停止。多次单击“提示”,然后继续单击“停止”。这并不能阻止延迟。撤回我的投票。@MaxYari,是的,因为
Start
不在乎