代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

jquery是否有一个插件可以在屏幕顶部显示“消息栏”如twitter的“错误密码”栏?

  •  14
  • nonopolarity  · 技术社区  · 14 年前

    Twitter会在屏幕顶部弹出一个信息栏,说“密码错误”,10秒钟后,它会向上滑动并消失。Chrome还使用这种方式显示“Do you want to save the password”(是否要保存密码)消息框。

    jquery是否已经有了一个插件?它在IE 6中也能工作吗?因为通常,相对于视区的显示(使用 position: fixed )不适用于IE 6。谢谢。

    更新: 感谢这些好的解决方案——我故意希望它能够工作(1)即使当用户向下滚动页面时,它也会显示在窗口屏幕的顶部,(2)可能会选择在窗口屏幕的底部显示该条(作为一个选项)。如果它能在IE6上工作,那就更好了…现在的程序员很差…

    2 回复  |  直到 14 年前
        1
  •  26
  •   Nick Craver    14 年前

    您只需要几行代码就可以做到这一点,比如:

    ​​​​function topBar(​​​message) {
      $("<div />", { 'class': 'topbar', text: message }).hide().prependTo("body")
          .slideDown('fast').delay(10000).slideUp(function() { $(this).remove(); });
    }
    

    然后给你使用的类一些样式,例如:

    .topbar { 
        background: #990000; 
        border-bottom: solid 2px #EEE; 
        padding: 3px 0; 
        text-align: center; 
        color: white;
    }​
    

    You can view a working demo here ,根据需要调整:)这将创建一个 <div> 在飞行中,把它添加到身体的顶部,所以不需要担心任何奇怪的定位,这在IE6中应该是很好的。完成后,它将向上滑动并移除 <DIV & GT; 它是为清理而创建的。您可以添加一个单击处理程序来立即删除它,等等,无论您需要什么。

        2
  •  3
  •   stagas    14 年前

    嗯,我到处玩,想出了一个很好的功能:

    [现场示例 http://jsfiddle.net/2arVf/ ]

    //
    // Usage: sendMessage(message, yes_text, no_text, class_to_style, callback_yes, callback_no)  -- for yes/no
    //    or: sendMessage(message, class_to_style[, timeout])  -- informative with optional auto-hide after timeout
    //
    
    var sendMessage = function(str,yes,no,my_class,callback_yes,callback_no) {
    
        clearMessageTimeout(); // clear the timeout so it doesn't accidentaly slide up
    
        if (typeof no == 'string') {   // check if this is a yes/no message
    
            $message.slideUp(0, function() {  // slide up if not already
                // scroll to the top so the user gets to see the message             
                $("html").animate({'scrollTop': 0}, 'fast', function() {    // then
                    $message
                    .unbind('mouseout').attr('class','')      // kill old classes
                    .addClass(my_class)    // add our class styling
                    .html([ str, '<br />', // create an array to add our
                                           // two handlers with #yes and #no IDs
                            '<button id="yes">', yes ,'</button>',
                            '<button id="no">' , no  ,'</button>'
                          ].join('')       // join the array and
                         )                 // insert message
                    .slideDown(1000)       // slide the message down
                    .find('#yes,#no')      // find #yes and #no
                    .click(function() {    // add click handler to #yes and #no                            
                        var answer=$(this).attr('id');           // should be 'yes' or 'no'
                        $message.slideUp(1000, function() {      // slide up and
                            $("html").animate({'scrollTop': 0},  // scroll to top again and
                                eval('callback_' + answer)       // call our callback
                            );
                        });
                    });     
                });        
            });
    
        } else {                  
    
            $message
                .unbind('mouseout')                // unbind previous mouseout
                .attr('class','')                  // kill old classes
                .addClass(yes)                     // add our class
                .html(str)                         // insert our message
                .slideDown(1000, function() {      // slide down the message
                $message.mouseout(function() {     // bind mouse out
                    setMessageTimeout(function() { // with a timeout if the pointer comes back
                        $message.slideUp(1000);    // to slide back up
                    }, 1000);                      // after 1 second
                });                           
            });
    
            if (typeof no == 'number') {       // if a timeout is specified
                setMessageTimeout(function() { // then it sets it
                    $message.slideUp(1000);    // to slide up by itself
                }, no);                        // after x milliseconds
            }
        }
    }
    
    // Initialize messenger
    
    $("<div></div>").prependTo('body').attr('id','message');
    
    var $message = $("#message")
        .mousemove(clearMessageTimeout),
        message_timeout;
    
    function setMessageTimeout(callback, time) {
        clearTimeout(message_timeout);
        message_timeout = setTimeout(callback, time);
    }
    
    function clearMessageTimeout() {
        clearTimeout(message_timeout);
    }
    

    例子:

    $(".invoke_message").click(function(e) {
    
        sendMessage(
    
            [ 'Here I am, a message..',
              'I can be multiline',
              '<strong>and have any html</strong>',,
              'Do you like me?'
            ].join('<br />'),
    
            'Yeap','Nope',  // yes and no text
    
            'normal',       // normal class
    
            function() {    // yes callback
                sendMessage('Thank you. I\'ll be gone in 3 secs', 'happy', 3000);
            },
    
            function() {    // no callback
                sendMessage('OK, have it your way then. You need to mouseout me to make me leave', 'sad');
            }
    
        );
    
        return false;
    });
    

    CSS:

    body {
        padding:0;
        margin:0;
    }
    strong {
        font-weight:bold;
    }
    #message {
        color:#fff;
        text-align:center;
    }
    .normal {
        background-color:#888;
    }
    .happy {
        background-color:#cc2;
    }
    .sad {
        background-color:#b44;
    }
    

    HTML:

    <p>I'm the main page. I'll do some space if there is a message</p>
    <p><a class="invoke_message" href="#">Click me</a></p>
    .<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br /><p><a class="invoke_message" href="#">Click me too</a></p>