javascript - jQuery:用最短的时间完成处理程序

标签 javascript jquery html

我有一个使用 .load() 加载内容的函数(但它可以使用任何内容)。有时,内容加载得如此之快,以至于我使用的过渡动画看起来不太好,事实上,它非常令人反感。我想在转换之间添加一个最短时间,这样如果内容加载得非常快,它仍然会等待最短时间(比如 500 毫秒)。

我的代码目前看起来像这样,有一个好的 jQuery 方法可以做到这一点吗?

$("body").on("click","a[href]",function (e) {
    e.preventDefault();

    var href = $(this).attr("href");

    // Do pre load animation (removed for clarity)
    $("#rightpanel").load($(this).attr("href"), function () {
        // Do post load animation (removed for clarity)
        History.pushState(null, null, href);
    });
});

最佳答案

这是一个涉及 promise 的答案:

// suggestion 1
// wait for both pre-load animation and load to complete :

$.when(
    $('.gizmo').slideUp(),
    $("#rightpanel").load($(this).attr("href"))
).done(function(){
    $('.gizmo').stop().slideDown();
    History.pushState(null, null, href);
});


// suggestion 2
// add a "500ms promise" :

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

$.when( delay(500),  $("#rightpanel").load($(this).attr("href")) ).done(function(){
    //post load stuff
});

这是一个fiddle一起玩。

<小时/>

正如 Chris 在评论中正确指出的那样,上面的代码不适用于 .load() : .load() 适用于 jQuery 选择,并返回所选集而不是底层 ajax promise 。

如果您使用 $.ajax$.get$.post 或其他全局 jQuery 函数,上述代码将起作用,< br/> 或者您可以创建一个额外的 promise :

var loadData = $.Deferred();
$('#rightpanel').load($(this).attr('href'), function(){ loadData.resolve() });

$.when( delay(500), loadData ).done( ... )

关于javascript - jQuery:用最短的时间完成处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23358756/

相关文章:

javascript - 误解了 jQuery 的 "undefined"技巧?

javascript - 根据宽度计算div的高度并保持比例

javascript - 将 setInterval 的定时 'click' 更改为 mouseenter/exit

javascript - 了解为什么 JavaScript 中的回调函数仅在一切完成时执行

javascript - 我的 Canvas 动画的静音按钮

javascript - 返回 false 不起作用

javascript - 根据输入文本更改按钮的 url

python - Xpath 获取带有子标签的父标签

javascript - 将 DOM 元素的属性与自定义属性名称一起使用是个好主意吗

javascript - 点击行编辑按钮时使行可编辑