javascript - 如何在单个函数中调整 JavaScript 事件的顺序?

标签 javascript jquery

有没有一种方法可以告诉浏览器等待另一个功能完成后再开始?

例如,在下面的 for 循环中,我希望 contact() 在 moveForward() 开始之前触发并结束。

for ($i = 0; $i <= ($slugPace - 1); $i++ ) {
    contract();
    moveForward();
    reset();
};

我尝试使用 $.when(//your first function).then(//your second function);this stackoverflow thread 中提到,但是列出的三个函数中的 JS 函数继续同时触发。

这里是完整的代码,如果有帮助的话:

    //Contracting the slug once:
    function contract(){
        $("#slug").animate({
            marginTop: 0,
            width: $slugThinner,
            height: $slugHigher,
        }, 250);
        $(".slugContainer").animate({
            marginLeft: $slugLeftMargin,
        }, 250);
    };

    //Extending the slug out and move him forward once:
    function moveForward(){
        $slugLeftMargin += $slugStepsLength;
        $("#slug").animate({
            marginTop: $slugMarginJS,
            width: $slugWide,
            height: $slugHigh,
        }, 250);
        $(".slugContainer").animate({
            marginLeft: $slugLeftMargin,
        }, 250);
    };

    function movement(){
        for ($i = 0; $i <= $slugStepsTotal; $i++ ) {
            contract();
            moveForward();
        };
    }

    function reset(){
        if ($slugLeftMargin > $screenWidth) {
            $slugLeftMargin = $slugWide * -1;
            $("#slug").stop().hide;
            $(".slugContainer").stop.css('margin-left',$slugLeftMargin);
            for ($i = 0; $i <= ($slugPace - 1); $i++ ) {
                contract();
                moveForward();
            };
        }
    }

    //Looping the contractions to move our little friend across the screen:
    $("#slug").click(function(){
        //alert('Slug width: ' + $slugWide + ', Slug height: ' + $slugHigh + ', Screen width: ' + $screenWidth + ', Slug steps total: ' + $slugStepsTotal + ', Slug higher: ' + $slugHigher + ', Slug thinner: ' + $slugThinner);
        //alert($slugStepsTotal);
        //alert('One step: ' + $slugStepsLength + '; Total steps: ' + $slugStepsTotal + '; Screen width: ' + $screenWidth);
        $("#slug").show();
        $(".clickMe").fadeOut(300);
        $.when(movement).then(reset());
    });

预先感谢您的帮助。

最佳答案

一般来说,由于您使用的是 animate 方法,因此您可以使用回调来做一些事情,例如:

function contract(callback) {
    $("#slug").animate({
            marginTop: 0,
            width: $slugThinner,
            height: $slugHigher,
        }, 250);
     $(".slugContainer").animate({
            marginLeft: $slugLeftMargin,
     }, 250, function() {
       callback();
      }
    );

你会这样调用合约:

contract(function(){ moveForward(); });

您可以阅读更多关于 animate 的内容 here

这就是您需要的基本概念:回调。

祝你好运!

关于javascript - 如何在单个函数中调整 JavaScript 事件的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9880095/

相关文章:

javascript - 链接衰落的奇怪行为

javascript - 递归 polymer 元素

javascript - $parent.inState 不是 Knockout JS 的函数错误

javascript - jquery/js 中的自执行函数

Javascript 自动检查登录可用性

javascript - 如何在客户端实现服务器更新监听器

javascript - 当我已经在不同的 iframe 中时,如何从外部 iframe 获取特定的 div

javascript - 不透明度在 IE8 中不起作用

jQuery - 删除 HTML 中的自闭合标签

javascript - 带画廊的 ColorBox