gpt4 book ai didi

jQuery延迟() - 如何停止它?

转载 作者:行者123 更新时间:2023-12-03 21:45:31 24 4
gpt4 key购买 nike

我已经尝试过 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>');
}

但我认为这不会停止(或删除)动画上的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();}
});

在重复该功能之前,actual_slide必须保护它,但这也不起作用..问题是当我快速更改幻灯片时,因为重置不会停止一切,并且它开始做我不做的事情想要加入(例如将图片更改为其他图片)。

最佳答案

您可以通过.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();
}
}

http://jsfiddle.net/wasikuss/5288z/

//编辑:更复杂的示例提供了日志记录时间戳和清理(如果没有清理,多次点击 Start 是不可预测的)以证明其有效

http://jsfiddle.net/q0058whc/

或以下

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

// console log will aways show 'end' values: 2000, 1000 an 400
// values may be different due to time wasted on calling functions
// sometimes delay is shorten by 0-200ms, it can be caused by js engine probably

function start()
{
cleanup();
ltime = (1*new Date());
$('.gfx').queue('fx', function(next)
{
logtime( 'animate1_start' );
$('.gfx').animate
({
width: 100
}, 2000, function(){logtime('animate1_end');inDelay = true;})
next();
})
.queue('fx', function(next)
{
logtime('delay_start');
next()
})
.delay(1000)
.queue('fx', function(next)
{
logtime('delay_end');
next()
})
.queue('fx', function(next)
{
logtime('animate0_start');
$('.gfx').animate
({
width: 0
}, function(){logtime('animate0_end');inDelay = false;})
next()
});
}

function cleanup()
{
// remove current queue
$('.gfx').clearQueue()
// first animate runned interval. stop it
.stop()
// reset width of element
.css('width',0)
}

function logtime( name )
{
var ntime = (1*new Date());
console.log( name + ': ' + ( ntime - ltime ) );
ltime = ntime;
}

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

//
// version without 'inDelay' check only if you know what are you doing
// http://jsfiddle.net/wasikuss/hkw9H/
//
.gfx
{
background: red;
width: 0;
height: 10px
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button onclick="start()">Start</button>
<button onclick="breakTheDelay()">Can't wait!</button>
<div class="gfx"></div>

关于jQuery延迟() - 如何停止它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7929266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com