Показать div при втором посещении

Я хочу, чтобы div #topmessage скользил вниз при втором посещении сайта пользователями. Также, когда пользователь нажимает #close, сообщение больше не будет отображаться. Я думаю, мне нужно установить файл cookie и посчитать его, но не знаю, как это сделать. У меня установлен следующий плагин cookie вместе с jquery http://plugins.jquery.com/files/jquery.cookie.js.txt

    <script type="text/javascript">
    jQuery(function($){ 
    $('#topmessage').delay(1000).slideDown(400);
    $("#close").click(function(){
          $("#topmessage").slideToggle(400);
        });

});
</script>
<div id="topmessage">
<a href="#" class="close" id="close">Close</a>
Hi welcome back, if you have any questions please feel free to <a href="/contact">contact me</a>.
</div>

Обновление. Причина, по которой я хочу сделать это, состоит в том, чтобы передать элемент div пользователям, которые посетили сайт один раз и теперь возвращаются в другой день. Я не просто хочу показать div во второй раз, когда сайт загружается, но он также должен быть в другую дату или сеанс. Насколько я понимаю, нет способа получить доступ к дате создания файла cookie?


person Thomas    schedule 24.05.2011    source источник


Ответы (4)


Это должно работать:

<script type="text/javascript">
    $(function(){
        var value = $.cookie('the_cookie'),
            date = null;
        if (/^\d+$/.test(value || "")) {
             date = new Date();
             date.setTime(value);
        } else if ((value || "") == "") {
             $.cookie('the_cookie', new Date().getTime());
        }

        if (null != date /* && date meets your requirements */){
            $('#topmessage').delay(1000).slideDown(400);
            $("#close").click(function(){
                $("#topmessage").slideToggle(400);
            });
        }
    });
</script>

Если вы хотите обновлять дату в файле cookie при каждом посещении:

        if (/^\d+$/.test(value || "")) {
             date = new Date();
             date.setTime(value);
        }
        $.cookie('the_cookie', new Date().getTime());

Рабочая демонстрация по адресу: http://jsfiddle.net/roberkules/NL9jd/.

ОБНОВИТЬ

добавлена ​​дата истечения срока действия и путь к файлу cookie
добавлен второй файл cookie только для сеанса

person roberkules    schedule 24.05.2011
comment
Спасибо - работает как рекламируется. Тем не менее, я обновил первоначальный вопрос, так как мне нужно было более конкретно описать проблему. Спасибо - person Thomas; 25.05.2011
comment
Теперь файл cookie хранит временную метку. - person roberkules; 25.05.2011
comment
По какой-то причине cookie не установлен? - person Thomas; 25.05.2011
comment
Извините, теперь я исправил некоторые ошибки и убедился, что это работает (см. демо). - person roberkules; 25.05.2011
comment
Как только файл cookie установлен и страница перезагружается, отображается div. Я хочу показать div только пользователю, который посетил сайт и который сейчас возвращается в другую дату. Кроме того, функция закрытия только переключает представление, не обновляя файл cookie, чтобы никогда больше не отображать div. - person Thomas; 26.05.2011
comment
Хорошо, я думаю, вам нужен второй файл cookie (только для сеанса), чтобы убедиться, что пользователь увидит сообщение только при следующем посещении (если постоянный файл cookie существует)... Чтобы это было ясно, сообщение больше никогда не должно появляться. только если пользователь нажмет на ссылку закрытия? Обновлю демо через несколько... - person roberkules; 26.05.2011
comment
Это круто. Спасибо большое - работает как надо. Протестировал его на локальном хосте и изменил время и дату, и бум появилось сообщение. Супер! - person Thomas; 27.05.2011

Я бы подумал, что что-то подобное должно храниться в бэкэнде и контролироваться сервером. Проблема с файлами cookie заключается в том, что кто-то может удалить все свои файлы cookie (или войти в систему через другой браузер/компьютер). Звучит как свойство в таблице базы данных, относящееся к пользователю.

Сервер мог бы просто установить флаг «показать div», и представление могло бы позаботиться об этом. Не уверен, какую серьезную побочную технологию вы используете.

person CtrlDot    schedule 24.05.2011
comment
Даже если вы делаете это на стороне сервера, у вас будет файл cookie для сеанса. Если вы не сохраните IP-адрес пользователя, в этом случае: 1) нехорошо делать без согласия пользователя 2) IP может быть динамическим, поэтому вы все равно потеряете след. Я думаю, что cookie - лучший способ. - person Ortiga; 24.05.2011
comment
Думаю, я предполагал, что Пользователь имел в виду, что это был кто-то, кто прошел аутентификацию. В этом случае вы можете хранить все данные в базе данных и показывать ссылки на основе таких вещей, как IsFirstVisit или что-то в этом роде. Если это просто случайные пользователи, то да, куки — единственный выход. - person CtrlDot; 24.05.2011

Вероятно (не использовал файл cookie Jquery, но просматривая документ...), сделайте...

jQuery(function($){ 
    if($.cookie("showMessage") == "true") {
    $('#topmessage').delay(1000).slideDown(400);
$.cookie("showMessage","never");
}
else if($.cookie("showMessage") != "never"){
$.cookie("showMessage","true");
}
    $("#close").click(function(){
          $("#topmessage").slideToggle(400);
$.cookie("showMessage","never");
        });
person Thomas Shields    schedule 24.05.2011

Сначала вам нужно определить, существует ли файл cookie. Если файл cookie существует, вы знаете, что пользователь уже посещал сайт один раз. Если файл cookie не существует, это первое посещение, создайте файл cookie.

person AlbertVo    schedule 24.05.2011