Javascript中函数流的最佳实践?
我有一个我认为相对简单的Ajax/动画,我正在将它添加到客户端站点,以便在项目之间选择显示为图像。流程如下所示:Javascript中函数流的最佳实践?,javascript,coding-style,jquery,Javascript,Coding Style,Jquery,我有一个我认为相对简单的Ajax/动画,我正在将它添加到客户端站点,以便在项目之间选择显示为图像。流程如下所示: $("#go1").click(function(){ $("#block1").animate( { width:"90%" }, { queue:true, duration:100 } ) .animate( { fontSize:"24px" }, 1500 ) .animate( { borderRightW
$("#go1").click(function(){
$("#block1").animate( { width:"90%" }, { queue:true, duration:100 } )
.animate( { fontSize:"24px" }, 1500 )
.animate( { borderRightWidth:"15px" }, 1500);
})
function loadXML (thmbId, callback) {
$.post("/your/page", { thumbnail: thmbId }, function (data) {
callback.call(this, data);
});
}
$('#thumbnail').live('click', function(){
loadXML(thumbnail_id);
makeHMTL(data);
$('pHome').animate({blah}).fadeOut();
$('project1').fadeIn();
$('thumbnail_id').puff();
});
我知道这显然是一种不好的方法,但我不知道如何嵌套/构造函数以使它们都同步。我真的很想得到一个答案,它能让我在将来构建我的功能,避免老鼠窝。教育我!:) 您可以使用回调对动画进行排序,如下所示:
$('#Div1').slideDown('fast', function(){
$('#Div2').slideUp('fast');
});
另请参见您可以使用回调对动画进行排序,如下所示:
$('#Div1').slideDown('fast', function(){
$('#Div2').slideUp('fast');
});
另请参见动画、fadeIn和puff事件/动作都应该有自己的回调选项,完成后会调用这些选项。所以你也需要把它们嵌套起来,而不是像你那样把它们拴起来
$("#pHome").animate({}, function(){
$("#project1").fadeIn(500, function(){
$("#thumbnail_id").puff();
});
});
动画、fadeIn和puff事件/动作都应该有自己的回调选项,在完成时调用这些选项。所以你也需要把它们嵌套起来,而不是像你那样把它们拴起来
$("#pHome").animate({}, function(){
$("#project1").fadeIn(500, function(){
$("#thumbnail_id").puff();
});
});
嵌套动画函数是一种方法,但当你做了很多动画函数时,它们可能会很糟糕,你很容易失去概览 一个选项是将它们全部打包到一个对象中,并将引用传递给回调:
$('#thumbnail').live('click', animation.step1);
var animation = {
step1: function() {
$("#Element").show("puff", {}, "slow", animation.step2);
},
step2: function() {
$("#Element").hide("linear", {}, "fast", animation.step3);
},
step3: function() {
$("#Element").show("bounce", {}, 500);
}
}
或者,您也可以使用内置动画队列,如下所示:
$("#go1").click(function(){
$("#block1").animate( { width:"90%" }, { queue:true, duration:100 } )
.animate( { fontSize:"24px" }, 1500 )
.animate( { borderRightWidth:"15px" }, 1500);
})
function loadXML (thmbId, callback) {
$.post("/your/page", { thumbnail: thmbId }, function (data) {
callback.call(this, data);
});
}
另外请查看文档:嵌套动画函数是一种方法,但如果执行了大量嵌套动画函数,可能会很糟糕,并且很容易失去概览 一个选项是将它们全部打包到一个对象中,并将引用传递给回调:
$('#thumbnail').live('click', animation.step1);
var animation = {
step1: function() {
$("#Element").show("puff", {}, "slow", animation.step2);
},
step2: function() {
$("#Element").hide("linear", {}, "fast", animation.step3);
},
step3: function() {
$("#Element").show("bounce", {}, 500);
}
}
或者,您也可以使用内置动画队列,如下所示:
$("#go1").click(function(){
$("#block1").animate( { width:"90%" }, { queue:true, duration:100 } )
.animate( { fontSize:"24px" }, 1500 )
.animate( { borderRightWidth:"15px" }, 1500);
})
function loadXML (thmbId, callback) {
$.post("/your/page", { thumbnail: thmbId }, function (data) {
callback.call(this, data);
});
}
还要检查文档:我建议您在
loadXML
函数中设置一个回调函数参数,以便在从服务器加载XML数据时能够执行makeHTML
函数和效果
对于动画,可以在上一个回调上执行以下动画,例如:
$('#thumbnail').live('click', function(){
loadXML(thumbnail_id, function (data) { // data is loaded
makeHMTL(data);
$('pHome').animate({blah}, function () {
$(this).fadeOut();
});
$('project1').fadeIn('slow', function () {
$('thumbnail_id').puff();
});
});
});
loadXML函数可能如下所示:
$("#go1").click(function(){
$("#block1").animate( { width:"90%" }, { queue:true, duration:100 } )
.animate( { fontSize:"24px" }, 1500 )
.animate( { borderRightWidth:"15px" }, 1500);
})
function loadXML (thmbId, callback) {
$.post("/your/page", { thumbnail: thmbId }, function (data) {
callback.call(this, data);
});
}
我建议您在
loadXML
函数中设置一个回调函数参数,以便能够在从服务器加载XML数据时执行makeHTML
函数和效果
对于动画,可以在上一个回调上执行以下动画,例如:
$('#thumbnail').live('click', function(){
loadXML(thumbnail_id, function (data) { // data is loaded
makeHMTL(data);
$('pHome').animate({blah}, function () {
$(this).fadeOut();
});
$('project1').fadeIn('slow', function () {
$('thumbnail_id').puff();
});
});
});
loadXML函数可能如下所示:
$("#go1").click(function(){
$("#block1").animate( { width:"90%" }, { queue:true, duration:100 } )
.animate( { fontSize:"24px" }, 1500 )
.animate( { borderRightWidth:"15px" }, 1500);
})
function loadXML (thmbId, callback) {
$.post("/your/page", { thumbnail: thmbId }, function (data) {
callback.call(this, data);
});
}