在我的 Rails 应用程序中,我有 flash 消息,我希望每次有 flash 消息时,它都会从顶部向下滚动(所有内容都变低)停留几秒钟,然后幻灯片会向上滚动。
我怎么能用 jQuery 做到这一点?
我要切换高度吗?
更新
有时消息会被注入到 HTML 中,这意味着slideDown
由于 DOM 已经加载,因此将无法工作,我怎样才能拥有它以便 jQuery 查找.message
然后应用slideDown
and slideUp
?
在我的 Rails 应用程序中,我有 flash 消息,我希望每次有 flash 消息时,它都会从顶部向下滚动(所有内容都变低)停留几秒钟,然后幻灯片会向上滚动。
我怎么能用 jQuery 做到这一点?
我要切换高度吗?
有时消息会被注入到 HTML 中,这意味着slideDown
由于 DOM 已经加载,因此将无法工作,我怎样才能拥有它以便 jQuery 查找.message
然后应用slideDown
and slideUp
?
您可以让它向下滑动,等待几秒钟,然后再次滑动:
$(selector for your message).slideDown(function() {
setTimeout(function() {
$(selector for your message).slideUp();
}, 5000);
});
将 更改为5000
您希望消息保持可见的时间(以毫秒为单位)。
并且记得display: none;
在 CSS 中为你的消息设置,这样它在 jQuery 进入之前不会出现。
我假设您的 Flash 消息包含在某个由类标识(或可以)的元素中。您想找到第一个,然后将滚动位置调整到该元素的顶部(或与其有一些偏移),然后等待并滚动回顶部。
$(function() {
var $flashMsg = $('.flash-message:first');
if ($flashMsg.length) { // we've got one
var top = $flashMsg.offset().top;
$('html,body').animate({ scrollTop: top })
.delay(3000)
.animate({ scrollTop: 0 });
}
});
使用 JQueryslideDown()
并slideUp()
在回调中调用加上一个计时器:
$("#message").slideDown(500, function(){
setTimeout(function(){
$("#message").slideUp(500);
},5000);
});
function flashRed(sel, blinks){ //using jQuery
blinks = blinks||3
var x = $(sel),
bg = x.css('background-color'),
fg = x.css('color'),
counter = 0,
f, b;
for(var i = 0; i < blinks * 2; i++){
setTimeout(function(){
if(counter%2){
f=fg; b=bg
}
else{
f='white'; b='red'
}
counter++
x.css({'color':f, 'background-color':b})
},i*400)
}
}
你可以这样做。这里的持续时间以毫秒为单位。
$.fn.flash_msg=function(duration){
this.fadeIn().delay(duration).fadeOut(function(){
this.remove();
})
}
$("#message").flash_msg(1500);