2009-03-03 15 views
44

Questa è la prima volta che ho visitato lo stack overflow e ho visto un bellissimo messaggio di intestazione che visualizza un testo e un pulsante di chiusura.Messaggio di intestazione proprio come a Stack Overflow

La barra di intestazione è fissa ed è ideale per attirare l'attenzione del visitatore. Mi chiedevo se qualcuno di voi conoscesse il codice per ottenere lo stesso tipo di barra di intestazione.

risposta

4

Il css rilevante comprenderebbe:

position: fixed; 
top: 0; 
width: 100%; 

More information about position:fixed:

Un elemento con position: fixed è posizionato a coordinate relative alla finestra del browser specificato. La posizione dell'elemento è specificata con le proprietà "left", "top", "right" e "bottom". L'elemento rimane in quella posizione indipendentemente dallo scorrimento. Funziona in IE7 (modalità rigorosa)

Se il supporto IE6 è importante per l'utente, è possibile che si desideri research workarounds.

25

rapida implementazione puro JavaScript:

function MessageBar() { 
    // CSS styling: 
    var css = function(el,s) { 
     for (var i in s) { 
      el.style[i] = s[i]; 
     } 
     return el; 
    }, 
    // Create the element: 
    bar = css(document.createElement('div'), { 
     top: 0, 
     left: 0, 
     position: 'fixed', 
     background: 'orange', 
     width: '100%', 
     padding: '10px', 
     textAlign: 'center' 
    }); 
    // Inject it: 
    document.body.appendChild(bar); 
    // Provide a way to set the message: 
    this.setMessage = function(message) { 
     // Clear contents: 
     while(bar.firstChild) { 
      bar.removeChild(bar.firstChild); 
     } 
     // Append new message: 
     bar.appendChild(document.createTextNode(message)); 
    }; 
    // Provide a way to toggle visibility: 
    this.toggleVisibility = function() { 
     bar.style.display = bar.style.display === 'none' ? 'block' : 'none'; 
    }; 
} 

come usarlo:

var myMessageBar = new MessageBar(); 
myMessageBar.setMessage('hello'); 
// Toggling visibility is simple: 
myMessageBar.toggleVisibility(); 
+0

Piuttosto che avere una ginocchiera dopo la linea append fai questo: bar.style.display = messaggio === ''? 'none': 'block'; Quindi quando si vuole sbarazzarsi della barra: myMessageBar.setMessage (''); –

+2

La commutazione di visibilità mi sembra un'API molto più intuitiva; Mi aspetto un messaggio vuoto da mostrare come un messaggio vuoto, piuttosto che nessuna barra. – Matchu

+0

Come invocare myMessageBar.toggleVisibility() come onclick per la barra? –

3

Ecco un metodo alternativo utilizzando jQuery che sarebbe anche scorrere su/giù in mostra/nascondi.

Aggiungere il seguente codice HTML subito dopo il tag <body> nella tua pagina:

<div id="msgBox"> 
    <span id="msgText">My Message</span>   
    <a id="msgCloseButton" href='#'>close</a> 
</div> 

Aggiungi questa CSS per il vostro foglio di stile

#msgBox { 
    padding:10px; 
    background-color:Orange; 
    text-align:center; 
    display:none; 
    font:bold 1.4em Verdana; 
} 
#msgCloseButton{ 
    float:right;  
} 

Ed ecco finalmente il javascript per impostare il pulsante di chiusura e funzioni per mostrare e nascondere la barra dei messaggi:

/* Document Ready */ 
$(function() { 
    SetupNotifications(); 
}); 

SetupNotifications = function() { 
    //setup close button in msgBox 
    $("#msgCloseButton").click(function (e) { 
     e.preventDefault(); 
     CloseMsg(); 
    }); 
} 

DisplayMsg = function (sMsg) { 
    //set the message text 
    $("#msgText").text(sMsg); 
    //show the message 
    $('#msgBox').slideDown(); 
} 

CloseMsg = function() { 
    //hide the message 
    $('#msgBox').slideUp(); 
    //clear msg text 
    $("#msgtText").val(""); 
} 

A eseguire un semplice test si potrebbe provare questo:

<a href='#' onclick="javascript: DisplayMsg('Testing');">Show Message!</a> 
+0

penso che questa sia la soluzione migliore, semplicemente perché sposta l'intera pagina verso il basso! – fjsj

11

Aggiornamento:


Check out the DEMO

codice utilizzato:

$(function(){ 
    $('#smsg_link').click(function(){ 
    showMessage('#9BED87', 'black', 'This is sample success message'); 
    return false; 
}); 

$('#imsg_link').click(function(){ 
    showMessage('#FFE16B', 'black', 'This is sample info message'); 
    return false; 
}); 

$('#emsg_link').click(function(){ 
    showMessage('#ED869B', 'black', 'This is sample error message'); 
    return false; 
}); 
}); 



/* 
showMessage function by Sarfraz: 
------------------------- 
Shows fancy message on top of the window 

params: 
    - bgcolor:  The background color for the message box 
    - color:  The text color of the message box 
    - msg:  The message text 
*/ 
var interval = null; 

function showMessage(bgcolor, color, msg) 
{ 
    $('#smsg').remove(); 
    clearInterval(interval); 

    if (!$('#smsg').is(':visible')) 
    { 
     if (!$('#smsg').length) 
     { 
      $('<div id="smsg">'+msg+'</div>').appendTo($('body')).css({ 
       position:'fixed', 
       top:0, 
       left:0, 
       width:'98%', 
       height:'30px', 
       lineHeight:'30px', 
       background:bgcolor, 
       color:color, 
       zIndex:1000, 
       padding:'10px', 
       fontWeight:'bold', 
       fontSize:'18px', 
       textAlign:'center', 
       opacity:0.8, 
       margin:'auto', 
       display:'none' 
      }).slideDown('show'); 

      interval = setTimeout(function(){ 
       $('#smsg').animate({'width':'hide'}, function(){ 
        $('#smsg').remove(); 
       }); 
      }, 3000); 
     } 
    } 
} 

I Se vuoi crearne uno, controlla la funzione slideToggle di jQuery.

+1

Sto cercando qualcosa che sposta l'intero sito web verso il basso, non come un menu a discesa –

+0

@harrison: Non sei sicuro di cosa intendi allora, puoi fare un esempio? – Sarfraz

+0

sì, aspetta. cercherò uno online. –

1

Qualcosa di simile?

$("#bar").slideUp(); 

Tuttavia, qui penso che svaniscono prima il bar poi portare il contenitore principale, in modo che sarebbe qualcosa di simile:

$("#bar").fadeOut(function(){ 
    $("#container").animate({"top":"0px"}); 
});