Como mostrar a mensagem pop-up como no Stack Overflow

102

Gostaria de adicionar uma mensagem pop-up como a que aparece no Stack Overflow quando não estou logado e tento usar os botões de votação.

Qual é o melhor método para conseguir isso? Isso é feito usando uma biblioteca jquery?

Puneet
fonte
16
Veja a fonte!
Josh Stodola
uma questão semelhante . Você pode querer verificar isso também.
Shoban
8
fiz isso e parecia referir-se a question.min.js. Não consegui encontrar esse plug-in, então fiz a pergunta
Puneet,

Respostas:

154

EDITAR : O código abaixo mostra como replicar as barras que aparecem na parte superior da tela quando você obtém um novo emblema, chega primeiro ao site, etc. Para as caixas de diálogo flutuantes que você obtém quando tenta comentar rápido demais, vote para sua própria dúvida, etc, verifique esta questão onde mostro como fazer isso ou apenas vá direto ao exemplo .


Veja como o Stackoverflow faz isso:

Esta é a marcação, inicialmente oculta para que possamos aparecer gradualmente:

<div id='message' style="display: none;">
    <span>Hey, This is my Message.</span>
    <a href="#" class="close-notify">X</a>
</div>

Aqui estão os estilos aplicados:

#message {
    font-family:Arial,Helvetica,sans-serif;
    position:fixed;
    top:0px;
    left:0px;
    width:100%;
    z-index:105;
    text-align:center;
    font-weight:bold;
    font-size:100%;
    color:white;
    padding:10px 0px 10px 0px;
    background-color:#8E1609;
}

#message span {
    text-align: center;
    width: 95%;
    float:left;
}

.close-notify {
    white-space: nowrap;
    float:right;
    margin-right:10px;
    color:#fff;
    text-decoration:none;
    border:2px #fff solid;
    padding-left:3px;
    padding-right:3px
}

.close-notify a {
    color: #fff;
}

E isso é javascript (usando jQuery):

$(document).ready(function() {
    $("#message").fadeIn("slow");
    $("#message a.close-notify").click(function() {
        $("#message").fadeOut("slow");
        return false;
    });
});

E voila. Dependendo da configuração da página, você também pode querer editar a margem superior do corpo na exibição.

Aqui está uma demonstração dele em ação.

Paolo Bergantino
fonte
3
Relendo a pergunta, não acho que era isso que a Op queria. Acho que ele está procurando as caixas que aparecem como avisos no site perto de tudo o que você faz. Acho que vou deixar isso assim mesmo.
Paolo Bergantino
Paolo, obrigado por deixar isso de lado! Acho que isso pode funcionar um pouco melhor do que o que eu estava usando para esta ação.
Jayrox
3
Embora não seja a resposta, é igualmente útil: P
rball de
Você também precisa definir um cookie ao clicar no X para que ele não apareça conforme você vai para mais páginas.
DisgruntledGoat
1
Eu gostaria de poder estrelar uma resposta também. Obrigado por esta excelente entrada!
Cringe,
5

Verifique também o jQuery UI Dialog

Jonstjohn
fonte
4

Eu uso o jqModal , fácil de usar e você pode conseguir ótimos efeitos

Juan
fonte
4

Usar o ModalPopup no kit de ferramentas de controle AJAX é outra maneira de obter esse efeito.

patjbs
fonte
1
por favor, comente o downvote, usando um pop-up modal é perfeitamente válido para o que a pergunta original fez.
patjbs
3

Aqui está o que descobri ao visualizar a fonte StackOverflow. Esperançosamente, economiza algum tempo para alguém. A função showNotification é usada para todas essas mensagens pop-up.

var showNotification=function(jClicked,msg){master.showErrorPopup(jClicked.parent(),msg)};
var showFadingNotification=function(jClicked,msg){master.showErrorPopup(jClicked.parent(),msg,true)};

//master...
showErrorPopup: function (e, h, f) {
    var g = $('<div class="error-notification supernovabg"><h2>' + h + "</h2>" + (f ? "" : "(click on this box to dismiss)") + "</div>");
    var i = function () {
        g.fadeOutAndRemove()
    };
    $(e).append(g);
    g.click(i).fadeIn("fast");
    setTimeout(i, (f ? Math.max(2500, h.length * 40) : 1000 * 30))
}

css

.error-notification{z-index:1;cursor:pointer;display:none;position:absolute;padding:15px;-moz-box-shadow:2px 2px 5px #000;-webkit-box-shadow:2px 2px 5px #000;box-shadow:2px 2px 5px #000;}
.error-notification a{color:inherit;text-decoration:underline;}
.error-notification li{font-size:110%;padding-top:3px;}
.supernovabg{color:#fff !important;background-color:#fe7a15 !important;}

É legal como eles usam a duração da mensagem para definir o tempo limite de esmaecimento. Eu não percebi que todas as mensagens (estilo sem atenuação) realmente desaparecem após 30 segundos.

dotjoe
fonte
0

Verifique o bootstrap . Existem alguns efeitos pop-up, modais, transições, alertas, tudo baseado em javascripte css.

steven967
fonte