2012-02-12 3 views
0
<div id="messages"> 
<div class="message"> <!-- Visible (5 seconds for hide, show the next, and hide again) --> 
<div class="message" style="display:none;"> <!-- Hidden --> 
<div class="message" style="display:none;"> <!-- Hidden --> 
</div> 

Следующий (нуб) код скроет <div> тега после пяти секунд будут созданы, так что я хочу, чтобы скрыть каждое уведомление через пять секунд, но когда это видно, это что-то как слайд-шоу, но с уведомлениями, 5 секунд на уведомление, когда оно видно.JQuery: уведомление Автоматически скрывать, когда она видна

function setid() { 
    $('.message').each(function() { 
     if($(this).attr('id')==uniqID) { 
      uniqID = Math.floor(Math.random()*9999999); 
     } 
    }); 
} 

console.log = function(message) { 
    console.olog(message); 
    setid(); 
    $('#messages').append('<div id="' + uniqID + '" class="message"> + message + '</div>').show(); 
    $('#' + uniqID).slideDown(200).delay(5000).slideUp(200); 
}; 
+0

Carful с одиночными/двойными кавычками. Это не будет работать '$ ('# messages'). Append ('

+ message + '
') .show();' См. Подсказку в подсветке кода? Это должно сказать вам что-то не так. – elclanrs

+0

class = "message"> 'Да, извините, я всегда пишу это неправильно в примере кода, я сделал это тщательно, но я этого не видел. Благодарю. – Kenny

+0

Затем вы должны исправить код. Также что это 'console.log = function (action, message)' ??. И этот 'console.olog (message);'? – elclanrs

ответ

3

Это на самом деле очень просто:

$(".message").hide().first().show(); 
setTimeout(showNotifications, 5000); 
function showNotifications(){ 
    $(".message:visible").remove(); 
    $(".message").first()show(); 
    if($(".message").length > 0){ 
     setTimeout(showNotifications, 5000); 
    } 
} 

Как это работает: Он выбирает все .message элементы и скрыть их, кроме первого. Через 5 секунд первое сообщение будет удалено с веб-страницы, и следующее сообщение будет отображаться еще 5 секунд, и это будет продолжаться до тех пор, пока на сайте не будет больше уведомлений.

Хотите немного анимации? Проверьте это:

$(".message").hide().first().show('slow'); 
setTimeout(showNotifications, 5000); 
function showNotifications(){ 
    $(".message:visible").hide('slow', function(){ 
     $(this).remove(); 
     $(".message").first().show('slow'); 
     if($(".message").length > 0){ 
      setTimeout(showNotifications, 5000); 
     } 
    }); 
}​ 

Click here for a working example.

+0

** Papaiatis ** Я предлагаю вам кеш '$ (". Message ")' для производительности. Кроме того, '$ (". Message: first ")' намного медленнее, чем '$ (". Message "). First()' – elclanrs

+0

@elclanrs 'first()' был хорошим моментом, но кешировал '$ (". Message ")' требует больше обслуживания и кода, потому что вам нужно удалить выбранные элементы из кэшированного массива и из DOM. Конечно, я согласен с вами в отношении производительности, но если я могу позволить себе сохранить это просто, я сделаю это. – papaiatis

+0

Не понимаю. Что вы подразумеваете под _перемещением выбранных элементов из кэшированного массива и из DOM_? Элементы кэширования упростят поддержку кода, и в этом примере нет причин не делать этого. – elclanrs

1

Вы можете попробовать что-то вроде этого.

var intervalId, 
    $messages = $('#messages').find('.messages:visible'), 
    count = 0; 

$messages.hide();//hide all the messages 

$messages.eq(count).show();//show the first message 

intervalId = setInterval(function(){ 
    $messages.eq(count).hide();//hide the previous message 
    if(count < $messages.length){ 
     $messages.eq(++count).show();//show the next message  
    } 
    else{//all the messages are over clear the interval 
     clearInterval(intervalId); 
    } 
}, 5000); 
+0

Спасибо, я попробую! – Kenny

Смежные вопросы