Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery:用最短时间完成处理程序_Javascript_Jquery_Html - Fatal编程技术网

Javascript jQuery:用最短时间完成处理程序

Javascript jQuery:用最短时间完成处理程序,javascript,jquery,html,Javascript,Jquery,Html,我有一个函数,可以使用.load()加载内容(但它可以使用任何东西)。有时内容加载太快,以至于我使用的过渡动画看起来不是很好,事实上它非常令人讨厌。我想在转换之间添加一个最短时间,这样,如果内容加载非常快,它仍然会等待最短时间(比如500毫秒) 我的代码目前看起来是这样的,有没有一种很好的jQuery方法 $("body").on("click","a[href]",function (e) { e.preventDefault(); var href = $(this).at

我有一个函数,可以使用
.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);
    });
});

以下是一个涉及承诺的答案:

// 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
});
这是一个可以玩的游戏


正如Chris在评论中正确指出的那样,上述代码不能与
.load()
一起使用:
.load()
应用于jQuery选择,并返回所选集,而不是底层ajax承诺

如果使用
$.ajax
$.get
$.post
或其他全局jQuery函数,
或者,您可以创建一个额外的承诺:

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

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

以下是一个涉及承诺的答案:

// 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
});
这是一个可以玩的游戏


正如Chris在评论中正确指出的那样,上述代码不能与
.load()
一起使用:
.load()
应用于jQuery选择,并返回所选集,而不是底层ajax承诺

如果使用
$.ajax
$.get
$.post
或其他全局jQuery函数,
或者,您可以创建一个额外的承诺:

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

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

以下是一个涉及承诺的答案:

// 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
});
这是一个可以玩的游戏


正如Chris在评论中正确指出的那样,上述代码不能与
.load()
一起使用:
.load()
应用于jQuery选择,并返回所选集,而不是底层ajax承诺

如果使用
$.ajax
$.get
$.post
或其他全局jQuery函数,
或者,您可以创建一个额外的承诺:

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

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

以下是一个涉及承诺的答案:

// 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
});
这是一个可以玩的游戏


正如Chris在评论中正确指出的那样,上述代码不能与
.load()
一起使用:
.load()
应用于jQuery选择,并返回所选集,而不是底层ajax承诺

如果使用
$.ajax
$.get
$.post
或其他全局jQuery函数,
或者,您可以创建一个额外的承诺:

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

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

事实上,这对AJAX请求不起作用,它不会等待它完成…结果是
load()
不起作用,但
$。get
起作用-必须是他们处理承诺的方式。实际上,这对AJAX请求不起作用,它不会等待它完成…结果是
load()
不起作用,但
$。get
起作用-必须是他们处理Promises的方式实际上这对AJAX请求不起作用,它不等待它完成…结果是
load()
起作用,但
$。get
起作用-必须是他们处理Promises的方式实际上这对AJAX请求不起作用,它不会等待它完成…结果是
load()
不起作用,但
$。get
起作用-这一定是他们处理承诺的方式