2012-02-09 64 views
1

我写了下面这个简单的函数,它接受两个参数,这两个参数主要来自服务器返回的另一个json函数。jQuery:超时/延迟与通知功能?

var timing = 10000; 

function notificationOutput(type, message) { 
    console.log('output now!'); 
    var note = $('.notification'); 
    note.css('display', 'none'); 
    if (type == "success") { note.removeClass('warning').addClass('success'); } 
    if (type == "warning") { note.removeClass('success').addClass('warning'); } 
    note.find('.message').html(message); 
    note.slideDown(function() { 
     note.delay(timing).slideUp(); 
    }); 
} 

它所做的只是从页面顶部向下滑动一个栏,以显示一条消息(成功或警告)。 timing变量用于通知栏停留10秒。所以当功能被触发时,我想要栏为slideDown(),保持该位置10秒,然后再次输入slideUp()

但是现在,当功能被触发时,会出现一个奇怪的超时,直到出现通知栏。这意味着当函数被触发时,我现在在那里的输出console.log()会立即记录在我的JS控制台中,但是slideDown()需要几秒钟才会出现!这是为什么?

我想(如output now在控制台登录在同一时间)slideDown()立即发生。为什么会有延迟发生?

感谢您的帮助!

+0

注意:'note.slideDown()。delay(timing).slideUp();'也可以。这里不需要使用完成的回调。 – Yoshi 2012-02-09 09:13:07

回答

0

那里没有什么明显的。我会尝试修剪代码,直到按预期滑落。删除回调,删除HTML集,删除成功/警告类的制定者,输出到控制台之前选择的音符元素,替换立即显示幻灯片等


还尝试调用.stop(true,true)注意事项:note.stop(true,true).slideDown();。这是为了防止某些其他动画忙碌,并且正在向下滑动排队。

+0

奇怪,那'note.stop(true,true).slideDown()'完成了这项工作。当我将它设置为show()时,它确实没有问题。不知道这个排队可能来自哪里。有任何想法吗? – matt 2012-02-09 09:29:33

+0

不是。也许还有其他一些动画被偶然地粘贴到它上面。如果你真的想知道,那么我会尽可能多地删除/禁用其他任何东西,直到它按预期工作。 – Supr 2012-02-09 09:35:57

+0

嘿,另一个问题。我有与'delay()'函数相同的问题...事件通过'时间'变量设置为10000通知停留只有3秒左右。 – matt 2012-02-09 17:26:47

0

试试这个

note.slideDown().delay(timing).slideUp(); 
0

我认为问题可能是由了slideDown使用的easing功能是swing默认情况下(这是logaritmic)。尝试使用直线,也许尝试使用更快了slideDown时间

note.slideDown(400, 'linear').delay(timing).slideUp(400, 'linear'); 
0

你是不是传递一个值durationslideDown。尝试:

note.slideDown(1000, function() { 
    note.delay(timing).slideUp(); 
});