Jquery:在一个函数完成时执行另一个函数
Jquery: execute a function when another is finished
我需要你的帮助。我想用jquery动画面板。它必须打开点击按钮(函数OPEN_PANEL),并加载不同的php页面上,然后关闭时,点击一个div类"关闭"(函数CLOSE_PANEL)。这工作得很好,问题是当我想打开一个不同的面板时,一个已经打开。它应该关闭打开的一个,然后打开我选择的最后一个,但看起来它同时执行两个函数。我该如何解决这个问题?
这是javascript代码:
var panel_is_open=0;
var last_open_panel="";
function animation_open_panel(id){
window_height=$(window).height()*0.85;
$("#"+id+"_button").css({'background-color':'rgba(255,255,255,0.8)', 'box-shadow':'0px 5px 10px #39C', '-webkit-box-shadow':'0px 5px 10px #39C'});
$("#main_panel").show().animate({ height: window_height+"px" }, 1500)
.animate({ width: "90%" },1000);
$("#main_panel").queue(function(){
$(".close").show();
$("#page_container").hide().load(id+"/"+id+".php",function(){
$("#page_container").fadeIn(1000);
});
$(this).dequeue();
});
}
function animation_close_panel(){
$("#page_container").fadeOut(1000, function(){
$("#main_panel").animate({ width: "637px" }, 1000)
.animate({ height:"0px" }, 1500, function(){
$(".close").hide();
$("#"+last_open_panel+"_button").css({'background-color':'', 'box-shadow':'', '-webkit-box-shadow':''});
});
});
}
function close_panel(){
if(panel_is_open==1){
animation_close_panel();
panel_is_open=0;
}
}
function open_panel(id){
if(panel_is_open==0){
animation_open_panel(id);
last_open_panel=id;
}
else if(panel_is_open==1){
if(id!=last_open_panel){
close_panel();
open_panel(id);
}
}
panel_is_open=1;
}
提前感谢您的帮助。
非常感谢你的建议,但是我无法用两种方法都解决这个问题。我弄错了,但我不明白是什么。
这是我的代码:
function close_panel(){
if(panel_is_open==1){
// animations here
panel_is_open=0;
}
}
function close_open_panel(next){
close_panel();
next();
}
function open_panel(id){
if(panel_is_open==0){
// animations here
last_open_panel=id;
panel_is_open=1;
}
else if(panel_is_open==1){
if(id!=last_open_panel){
close_open_panel(function(){
open_pannel(id);
});
}
}
}
你知道我错在哪里吗?谢谢。
如果你在jQuery特定的解决方案,然后查找延迟对象:
jQuery.Deferred(),在1.5版中引入,是一个可链的实用对象,它可以将多个回调注册到回调队列中,调用回调队列,并中继任何同步或异步函数的成功或失败状态。
你可以在函数中使用回调,例如
function open(callback)
{
// do stuff
callback(some_value);
}
那么你可以这样使用它:
open(function(value)
{
// anything here will be executed
// after the function has finished
});
callback()
和function(value)
中的值是可选的,您可以返回一个直接的函数,而不是传递一个要回调的值,但是,对于某些需要异步回调的函数来说,它是有用的。
关于回调函数的更多信息:
- 了解JavaScript中的回调函数
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 我可以在json对象中添加一个函数吗
- Javascript使函数一个接一个地执行
- 是JavaScript中的函数一个对象
- 两个几乎相等的jQuery函数;一个适用于IE,一个不适用于IE
- 两个Javascript函数一个window.onload=Custom.init;和一个window.onload=f
- 使javascript加载函数一个接一个地执行
- 如何通过两个嵌套的匿名函数(一个带有超时的事件处理程序)传递变量
- 为什么我不能让两个jQuery函数一个在另一个里面呢?
- 给函数一个变量名,而不是它的值
- 如何使用嵌入函数(一个滚动页由Pete - peachananr)
- 是否有可能给JavaScript函数一个类型/类?
- 确保两个函数一个接一个地执行,其中第一个函数内部有一个异步调用
- 两个不同的ajax函数一个接一个调用返回相同的值
- jQuery第一次更改函数一个工作
- 给这个函数一个id
- 如何给回调函数一个值一个变量在特定时刻
- 使用回调使两个函数一个接一个地运行
- 两个函数(一个用php)是否可以用“;onclick”;
- 两个几乎相同的函数.一个函数用Queue进行排队.Jquery效果在queued函数上不起作用.为什么