noty Jquery плагин тайм-аут не происходит

Тайм-аут плагинов Jquery noty не работает при наличии списка сообщений. Я получаю список сообщений от сервлета и вызываю Ноти так.

<script>
    function callNotification()
    {
        <c:foreach var = "message" items = "${sessionScope.notification}">
             notify('${message}');
        </c:foreach>
    }
    function notify(message)
    {
       noty({
                "text": message,
                "theme": noty_theme_facebook",
                "layout": topRight,
                "information","animateOpen":{"height":"toggle"},
                "information","animateOpen":{"height":"toggle"},
                "speed":500,
                "timeout":5000,
                "closeButton":true,
                "closeOnSelfClick":true,
                "closeOnSelfOver":false,
                "modal":false
          })
    </script>

В идеале это должно зациклить сообщения и распечатать их с таймаутом 5000 мс. Но это печатает все сообщения сразу. Далее я попытался использовать встроенную функцию javascript setTimeout и заменил свою callNotification этим.

 function callNotification()
    {
        <c:foreach var = "message" items = "${sessionScope.notification}">
         (function(message){ 
            setTimeout(function(){notify('${message}');},5000)
         }('${message}')
        }}
        </c:foreach>
    }

Но это также оказалось неэффективным. Странно, тайм-аут, кажется, работает нормально, когда я заменяю "layout":center в методе уведомления. Куда я иду не так. Я хочу, чтобы сообщения отображались со временем 5 секунд, после чего первое сообщение автоматически стирается, а следующее отображается.

7 ответов

Noty закодирован так, что если у вас есть кнопки в Noty, он отключает тайм-аут. Это не имеет смысла для меня, но это так.

Это виновник (строка 62):

60: // If we have button disable closeWith & timeout options
61: this.options.closeWith = [];
62: this.options.timeout = false;

Просто удали this.options.timeout = false; и это сохранит время ожидания, если у вас есть ноти с кнопками.

Чтобы заставить это работать, я изменил следующее в jquery.noty.js ...

self.$bar.delay(self.options.timeout).promise().done(function () {
                self.close();
            });

к этому...

setTimeout(function () {
                self.close();
            }, self.options.timeout);

Мой ответ для v2.3.7.

Noty возвращает объект javascript, следовательно, если вы проверите его в firebug, выполнив console.dir(n), вы найдете все методы и свойства возвращаемого объекта.

Следующее установит тайм-аут на 3 секунды:

var n = noty({text: 'noty - a jquery notification library!'});
n.setTimeout(3000);

Пытаться closeWith с опцией тайм-аута надеюсь, что она будет работать нормально

   function generate(type, text) {

                var n = noty({
                    text        : text,
                    type        : type,
                    dismissQueue: true,
                    layout      : 'topRight',
                    closeWith   : ['click','timeout'],
                    theme       : 'relax',
                    maxVisible  : 10,
                    timeout     :7000,

                    animation   : {
                        open  : 'animated bounceInRight',
                        close : 'animated bounceOutRight',
                        easing: 'swing',
                        speed : 500
                    }
                });

Вы должны предоставить эту опцию в качестве параметра: "buttons: false"

В вашем jquery.noty.packaged.js создайте глобальную переменную с именем "master_self" file.Now в строке 103 или 104 должна быть строка var self = this; чуть ниже этой линии присвойте master_self значение self master_self = self;

Теперь создайте функцию в том же файле:

function autoTimeout(timeoutVal){
    setTimeout(function(){
                            var self = master_self;
                            if (typeof self.options.animation.close == 'string') {
                                self.$bar.addClass(self.options.animation.close).one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function() {
                                    if(self.options.callback.afterClose) self.options.callback.afterClose.apply(self);
                                    console.log(self);
                                    self.closeCleanUp();
                                });
                            } else {
                                self.$bar.clearQueue().stop().animate(
                                    self.options.animation.close,
                                    self.options.animation.speed,
                                    self.options.animation.easing,
                                    function() {
                                        if(self.options.callback.afterClose) self.options.callback.afterClose.apply(self);
                                    })
                                    .promise().done(function() {
                                        self.closeCleanUp();
                                    });
                            }
                         },timeoutVal);
}

Теперь явно вызовите эту функцию для уведомления, для которого вы хотите тайм-аут таким образом сразу после вызова объекта-ноти для создания уведомления:

autoTimeout(1000);

Вы также можете добиться этого, указав этот параметр во время инициализации

buttons: false

Больше здесь http://ned.im/noty/

Другие вопросы по тегам