Задержка Jquery slideDown с использованием time (); - PullRequest
0 голосов
/ 02 февраля 2012

Извините, я не смог найти это.

$('div#loader').slideDown("fast").delay(1.5);

Не выдает слов, как ожидалось, я хочу, чтобы он slideDown, затем оставался в этом режиме в течение 1,5 секунд, а затем функция загрузки, которая происходит очень быстроа затем он скользит вверх, используя быстро.Я думал, что delay(); был правильным подходом.

Полная функция для тех, кто хочет видеть:

$(document).ready(function () {
    function last_msg_funtion() {
        var ID = $(".pic_box:last").attr("id");
        $('div#loader').slideDown("fast").delay(1.5);
        $.post("/?action=get&id=" + ID,
        function (data) {
            if (data!="") {
                $(".pic_box:last").after(data);
            }
            $('div#loader').slideUp("fast");
        });
    };
});

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

Задержка только задерживает функции, которые идут после него в chian, поэтому она ничего не задерживает там. Вам лучше использовать setTimeout здесь IMO

$('div#loader').slideDown("fast", function(){
   setTimeout(function(){
    $.post("/?action=get&id=" + ID,
    function (data) {
        if (data!="") {
            $(".pic_box:last").after(data);
        }
        $('div#loader').slideUp("fast");
    });
}, 1500);
});

Вот код задержки, если вы заинтересованы,

// Based off of the plugin by Clint Helfers, with permission.
// http://blindsignals.com/index.php/2009/07/jquery-delay/
delay: function( time, type ) {
    time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
    type = type || "fx";

    return this.queue( type, function( next, hooks ) {
        var timeout = setTimeout( next, time );
        hooks.stop = function() {
            clearTimeout( timeout );
        };
    });
},

Вы можете видеть, как он берет только то, что находится дальше в цепочке функций, и задерживает это.

1 голос
/ 02 февраля 2012

Вы можете определить вспомогательную функцию wait и запустить свой код после ожидания в течение 1,5 секунд:

$.wait = function(time) {
  return $.Deferred(function(dfd) {
    setTimeout(dfd.resolve, time);
  });
}


$(document).ready(function () {
    function last_msg_funtion() {
        var ID = $(".pic_box:last").attr("id");
        $('div#loader').slideDown("fast");
        $.wait(1500).then(function() {
            $.post("/?action=get&id=" + ID, function (data) {
                if (data != "") {
                    $(".pic_box:last").after(data);
                }
                $('div#loader').slideUp("fast");
            });
        });
    };
});

Функция wait делает ваш код лучше читаемым IMO

...