Javascript 如何在jQuery中重置延迟?
我在做老虎机,我想在有人点击添加或删除时显示行 减去一行。我使用以下代码;问题是,当某人快速点击(比延迟时间快)时,会产生比预期更大的延迟。这是一个演示(和)Javascript 如何在jQuery中重置延迟?,javascript,jquery,Javascript,Jquery,我在做老虎机,我想在有人点击添加或删除时显示行 减去一行。我使用以下代码;问题是,当某人快速点击(比延迟时间快)时,会产生比预期更大的延迟。这是一个演示(和) 函数箭头编号(id、最小值、最大值、差值){ 如果((最小值==未定义)| |(最小值min){ if(parseInt(差)>=parseInt(n)) n=最小值; 其他的 n=parseInt(n)-parseInt(差); showNumber(n); 如果(id=='line') 展示线(n); } }); 单击(函数())
函数箭头编号(id、最小值、最大值、差值){
如果((最小值==未定义)| |(最小值<0)){
最小值=1;
}
如果((差异==未定义)){
差异=1;
}
var-previousArrow=$('.+id+'.previous');
var nextArrow=$('.+id+'.next');
变量ScreenNumber=$('.'.+id+'span');
var actualNumber=$('.'.+id+'span').text();
var n=实际数量;
上一个箭头。单击(函数(){
如果(n>min){
if(parseInt(差)>=parseInt(n))
n=最小值;
其他的
n=parseInt(n)-parseInt(差);
showNumber(n);
如果(id=='line')
展示线(n);
}
});
单击(函数()){
if(nmax)
n=最大值;
其他的
n=parseInt(n)+parseInt(差);
showNumber(n);
如果(id=='line')
展示线(n);
}
});
函数showNumber(n){
屏幕编号。文本(n);
}
}
功能显示行(行){
var容器='行';
var t=1000;
交换机(线路){
案例20:$('.+容器+'.l.l-20')。显示(0)。延迟(t)。隐藏(0);
案例19:$('.+容器+'.l.l-19').show(0).delay(t).hide(0);
案例18:$('.'容器+'.l.l-18').show(0).delay(t).hide(0);
案例17:$('.+容器+'.l.l-17').show(0)、delay(t)、hide(0);
案例16:$('.+容器+'.l.l-16').show(0)、delay(t)、hide(0);
案例15:$('.+容器+'.l.l-15').show(0)、delay(t)、hide(0);
案例14:$('.+容器+'.l.l-14').show(0)、delay(t)、hide(0);
案例13:$('.+容器+'.l.l-13').show(0)、delay(t)、hide(0);
案例12:$('.+容器+'.l.l-12').show(0)、delay(t)、hide(0);
案例11:$('.+container+'.l.l-11').show(0)、delay(t)、hide(0);
案例10:$('.+容器+'.l.l-10').show(0)、delay(t)、hide(0);
案例9:$('.+container+'.l.l-9').show(0)、delay(t)、hide(0);
案例8:$('.+容器+'.l.l-8').show(0)、delay(t)、hide(0);
案例7:$('.+container+'.l.l-7').show(0)、delay(t)、hide(0);
案例6:$('.+容器+'.l.l-6').show(0)、delay(t)、hide(0);
案例5:$('.'容器+'.l.l-5').show(0)、delay(t)、hide(0);
案例4:$('.+容器+'.l.l-4').show(0)、delay(t)、hide(0);
案例3:$('.+container+'.l.l-3').show(0)、delay(t)、hide(0);
案例2:$('.+容器+'.l.l-2').show(0)、delay(t)、hide(0);
案例1:$('.+容器+'.l.l-1').show(0)、delay(t)、hide(0);
}
}
箭头编号(“线”,1,20)代码>
.line{
宽度:500px;
高度:200px;
}
.lines>.l{宽度:50px;高度:50px;颜色:#fff;浮动:左;背景:#000;边距:10px 0;显示:无;}
.lines>.l:n子(2n){背景:rgba(0,0,0,5);}
/* */
.线路{
颜色:#fff;
字体大小:30px;
宽度:300px;
高度:100px;
}
.line>.previous、.line>.next{
宽度:100px;
身高:100%;
背景:蓝色;
浮动:左;
}
.line>span{
宽度:100px;
身高:100%;
背景:绿色;
浮动:左;
显示:块;
}
1.
2.
3.
4.
5.
6.
7.
8.
9
10
11
12
13
14
15
16
17
18
19
20
之前
1.
下一个
try():
另一个选项是替换延迟,使用淡入/动画显示和隐藏,设置超时并简单地使用停止()和clearTimeout()delay()
不能停止和启动。相反,使用setTimeout和clearTimeout
用以下内容替换showLines功能:
var line_timers = {};
function showLines(lines){
var container = 'lines';
var t = 1000;
for(var i=1;i<=20;i++) {
var selector = '.'+container+' .l.l-' + i;
clearTimeout(line_timers[selector]);
if(i<=lines){
$(selector).show(0);
line_timers[selector]=setTimeout((function(x){
return function(){
$(x).hide(0);
}
})(selector),t);
} else {
$(selector).hide(0);
}
}
}
var行_定时器={};
功能显示行(行){
var容器='行';
var t=1000;
对于(var i=1;我能添加一个JSFIDLE吗?这是因为.delay()
事件在队列中彼此“堆叠”,并且不会在新调用时取消。请查看(可能重复)为了解决这个问题,@RejithRKrishnan对延迟表示抱歉,下面是他使用开关上的故障提示来显示第1行-第1行,虽然这可以用解决,而(第--)行@trex005啊,我没有注意到缺少的中断:)谢谢!谢谢@Alex,但也许我应该像你说的那样尝试使用淡入淡出/动画。这是使用dequeue()实现的:@arglab是的,那看起来不性感!在这里,它只是被替换到你的小提琴中:
var line_timers = {};
function showLines(lines){
var container = 'lines';
var t = 1000;
for(var i=1;i<=20;i++) {
var selector = '.'+container+' .l.l-' + i;
clearTimeout(line_timers[selector]);
if(i<=lines){
$(selector).show(0);
line_timers[selector]=setTimeout((function(x){
return function(){
$(x).hide(0);
}
})(selector),t);
} else {
$(selector).hide(0);
}
}
}