0

我在http://www.red-team-design.com/cool-notification-messages-with-css3-jquery找到了一个脚本,但我的代码有问题

我想让它1)点击隐藏,2)15秒后隐藏

HTML:

<div class="warning message">It is currently past 4pm. Any orders placed between now and midnight will not be placed until 4pm tomorrow.</div>

Javascript:

var myMessages = ['info','warning','error','success']; // define the messages types
function hideAllMessages(){
    var messagesHeights = new Array(); // this array will store height for each
    for (i=0; i<myMessages.length; i++){
        messagesHeights[i] = $('.' + myMessages[i]).outerHeight(); // fill array
        $('.' + myMessages[i]).css('top', -messagesHeights[i]); //move element outside viewport
    }
}
function showMessage(type){
    hideAllMessages();
    $('.'+type).animate({top:"0"}, 500);
    setTimeout(function(){
        $('.'+type).animate({top: -$('.'+type).outerHeight()}, 500);
        hideAllMessages();
        },15000);
}
$(document).ready(function(){
    // Initially, hide them all
    hideAllMessages();
    // Show message
    for(var i=0;i<myMessages.length;i++) {showMessage(myMessages[i]);}         
    // When message is clicked, hide it
    $('.message').click(function(){              
          $(this).animate({top: -$(this).outerHeight()}, 500);
    });
});

这是由 php 执行的,我只是使用 php 将以下行插入到我的代码中:

<script type='text/javascript'>
    $(document).ready(function(){
        showMessage(warning)
    });
</script>​

现在由于某种原因,当我单击 div 时它不会隐藏,并且它不会在指定的 15 秒后隐藏。

我在http://jsfiddle.net/dpdesignz/yTaRa/1/创建了一个 JSFiddle,如果有人介意看看可能出了什么问题?我感觉它与 PHP 回显执行的部分有关,所以有人知道另一种方法来做到这一点吗?

4

2 回答 2

1

您的代码中有一些错误。

第一的warning is not defined

其中指的是以下内容:

$(document).ready(function(){
    showMessage(warning) 
});

warning不是一个集合变量。也许你的意思是这样'warning'

第二showMessage is not defined

showMessage('warning');

这是在showMessage()定义函数之前调用的。您可以通过将此呼叫移至另一个呼叫来解决此问题$(document).ready()

http://jsfiddle.net/yTaRa/5/

var myMessages = ['info','warning','error','success']; // define the messages types
function hideAllMessages(){
    var messagesHeights = new Array(); // this array will store height for each
    for (i=0; i<myMessages.length; i++){
        messagesHeights[i] = $('.' + myMessages[i]).outerHeight(); // fill array
        $('.' + myMessages[i]).css('top', -messagesHeights[i]); //move element outside viewport
    }
}
function showMessage(type){
    hideAllMessages();
    $('.'+type).animate({top:"0"}, 500);
    setTimeout(function(){
        $('.'+type).animate({top: -$('.'+type).outerHeight()}, 500);
        hideAllMessages();
        },15000);
}
$(document).ready(function(){
    // Initially, hide them all
    hideAllMessages();
    // Show message
    for(var i=0;i<myMessages.length;i++) {showMessage(myMessages[i]);}         
    // When message is clicked, hide it
    $('.message').click(function(){              
          $(this).animate({top: -$(this).outerHeight()}, 500);
    });
    showMessage('warning');
});
​
于 2012-11-23T05:40:06.960 回答
1
$(document).ready(function(){
    $('.info, .warning, .error, .success').hide();
    $('.info, .warning, .error, .success').slideDown(500);
    $('.info, .warning, .error, .success').delay(15000).slideUp(500);
    $('.info, .warning, .error, .success').on('click', function() {
        $(this).hide();
    });
});

让 jQuery 完成所有工作 =)

http://jsfiddle.net/yTaRa/8/

如果每个消息类型也将被归类为消息,我们可以进一步减少此代码......

$(document).ready(function(){
    $('.message').hide();
    $('.message').slideDown(500);
    $('.message').delay(15000).slideUp(500);
    $('.message').on('click', function() {
        $(this).hide();
    });
});

http://jsfiddle.net/yTaRa/9/

$(document).ready(function(){
    setTimeout(function() {                   //sets a 15 second timer on each message to collapse up over .5 seconds
        $('.message').slideUp(500);
    }, 15000);
    $('.message').hide();                     //hides all elements with the class message.
    $('.message').slideDown(500);             //animates messages to expand down over .5 seconds
    $('.message').on('click', function() {    //wires up click event to hide message on click
        $(this).slideUp(500);
    });
});

http://jsfiddle.net/yTaRa/10/

我必须使用 setTimeout 来调用 slideUp 的 15 秒,因为单击 slideUp 不会触发:

$('.message').delay(15000).slideUp(500);

我认为这是因为一次只能在同一个元素上安排一个 slideUp() 调用。

于 2012-11-23T05:57:54.747 回答