Jquery不按顺序做事

时间:2014-08-19 04:54:51

标签: jquery html css

我正在开发一个具有滑出菜单的项目,当单击菜单项时会使页面变暗,移动一些div,然后返回屏幕进行查看。我用全屏,固定位置div完成了这个,使用.animate将不透明度设置为1,用.css移动我的divs然后.anan全屏幕div回到不透明度0.虽然这一切似乎都工作,它没有按顺序工作。代码首先运行所有.css命令,然后运行所有.animate命令。

$("#overlay").animate({"opacity":"1"}, "slow")
$(".main").css({"left":"-100%"})
$(".section").css({"left":"-100%"})
$(".pink").css({"left":"0"})
$("#overlay").animate({"opacity":"0"}, "slow")

代码的顺序正确,但.main div移出屏幕,所有.section div移出屏幕,.pink div移动到屏幕上,然后#overlay不透明度设置为1,然后#叠加不透明度设置为0.

为什么所有.css操作都会触发,然后是.animate操作?我如何按顺序让它们发生?

2 个答案:

答案 0 :(得分:5)

.animate()是一个异步函数,因此.animate()之后的语句在动画完成之前运行。您可以使用完整的回调来解决此问题

$("#overlay").animate({
    "opacity": "1"
}, "slow", function () {
    $(".main").css({
        "left": "-100%"
    })
    $(".section").css({
        "left": "-100%"
    })
    $(".pink").css({
        "left": "0"
    })
    $(this).animate({
        "opacity": "0"
    }, "slow")
})

答案 1 :(得分:1)

你需要学习如何使用动态完成时调用回调的callbacks

$("#overlay").animate({"opacity":"1"}, "slow",
 //from here is the callback function that is invoked when animation finishes
function(){ 
      $(".main").css("left":"-100%");
      $(".section").css("left":"-100%");
      $(".pink").css("left":"0");
      $(this).animate({"opacity":"0"}, "slow");
});