Jak wyświetlić komunikat wyskakujący, jak w przepełnieniu stosu


102

Chciałbym dodać wyskakującą wiadomość, taką jak ta, która pojawia się w Stack Overflow, gdy nie jestem zalogowany i próbuję użyć przycisków głosowania.

Jaka jest najlepsza metoda osiągnięcia tego? Czy jest to zrobione przy użyciu biblioteki jquery?


16
Zobacz źródło!
Josh Stodola

Jest podobne pytanie. Możesz to również sprawdzić.
Shoban,

8
Zrobiłem to i wydawało się, że odnosi się do question.min.js Nie mogłem znaleźć tej wtyczki, więc zadałem pytanie
Puneet

Odpowiedzi:


154

EDYTUJ : Poniższy kod pokazuje, jak replikować paski, które pojawiają się u góry ekranu po otrzymaniu nowej odznaki, pierwszym wejściu na stronę itp. W przypadku okien dialogowych, które pojawiają się, gdy próbujesz komentować zbyt szybko, zagłosuj w przypadku własnego pytania itp. sprawdź to pytanie, w którym pokazuję, jak to zrobić, lub po prostu przejdź od razu do przykładu .


Oto jak to robi Stackoverflow:

To jest znacznik, początkowo ukryty, abyśmy mogli go wprowadzić:

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

Oto zastosowane style:

#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;
}

A to jest javascript (używając jQuery):

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

I voila. W zależności od ustawień strony możesz również chcieć edytować górny margines treści na wyświetlaczu.

Oto demo tego w akcji.


3
Czytając ponownie pytanie, nie sądzę, żeby tego chciał Opiekun. Myślę, że szuka pól, które pojawiają się jako powiadomienia w witrynie w pobliżu wszystkiego, co robisz. Myślę, że i tak zostawię to.
Paolo Bergantino

Paolo, dzięki za zostawienie tego! Myślę, że to może działać trochę lepiej niż to, czego używałem do tej akcji.
Jayrox,

3
Chociaż nie odpowiedź, równie pomocne: P
rball

Musisz także ustawić plik cookie po kliknięciu X, aby nie pojawiał się, gdy przechodzisz do kolejnych stron.
DisgruntledGoat

1
Chciałbym też móc oznaczyć odpowiedź. Dzięki za ten wspaniały wpis!
wzdrygnąć się



4

Korzystanie z ModalPopup w zestawie narzędzi kontroli AJAX to kolejny sposób na uzyskanie tego efektu.


1
proszę skomentować głos przeciw, użycie wyskakującego okienka jest całkowicie poprawne w przypadku tego, co zadawano pierwotnie.
patjbs,

3

Oto, co znalazłem podczas przeglądania źródła StackOverflow. Mam nadzieję, że zaoszczędzi komuś trochę czasu. Funkcja showNotification jest używana dla wszystkich tych komunikatów wyskakujących.

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;}

Fajnie, jak wykorzystują długość wiadomości, aby ustawić czas wygaszania. Nie zdawałem sobie sprawy, że wszystkie (nie blaknące) wiadomości faktycznie znikają po 30 sekundach.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.