繁体   English   中英

jQuery动画不等待回调

[英]Jquery Animations not waiting for callback

我有一个Jquery动画,它在动画完成之前正在运行其功能中的代码。 此代码所在的页面尚不完整,但是如果您想看看它,那就是Cottageboards.com/orderform

$('#snow').fadeIn(500, "linear", function () {
    $('#largeImage').fadeOut(500, function () {
        $('#largeImage').attr('src', selectedimg).load(function () {
            $('#largeImage').fadeIn(1000, function () {

//Everything below here is running before the above image's fade in is complete


                $('#snow').fadeOut(5000);
                var selection = 'input[name="' + $(selectionage).data('type') + '_selection"]';
                $($('#selected_thumb').val()).attr('src', $($('#selected_thumb').val()).data('regular'));
                $(selectionage).attr('src', $(selectionage).data('selected'));
                selectedid = '#' + $(selectionage).attr('id');
                $('#selected_thumb').val(selectedid);
                $('#selected_info').html($(selectionage).data('desc'));
                $('#name').html($(selectionage).data('name'));
                if ($(selectionage).data('val') === 99) {
                    $('#upload').show();
                    $('#displayinfo').hide();
                } else {
                    $(selection).val($(selectionage).data('val'));
                    $('#upload').hide();
                    $('#displayinfo').show();
                }
                $('#next').prop('disabled', false);
            });
        });
    });
});

重写后,使加载功能先于src更改就可以了,就像魅力一样。 感谢您的帮助!

工作代码:

$('#snow').fadeIn(500, "linear", function () {
    $('#largeImage').fadeOut(500, function () {
        $('#largeImage').unbind().load(function () {
            $('#largeImage').fadeIn(1000, function () {
                $('#snow').fadeOut(5000);
                var selection = 'input[name="' + $(selectionage).data('type') + '_selection"]';
                $($('#selected_thumb').val()).attr('src', $($('#selected_thumb').val()).data('regular'));
                $(selectionage).attr('src', $(selectionage).data('selected'));
                selectedid = '#' + $(selectionage).attr('id');
                $('#selected_thumb').val(selectedid);
                $('#selected_info').html($(selectionage).data('desc'));
                $('#name').html($(selectionage).data('name'));
                if ($(selectionage).data('val') === 99) {
                    $('#upload').show();
                    $('#displayinfo').hide();
                } else {
                    $(selection).val($(selectionage).data('val'));
                    $('#upload').hide();
                    $('#displayinfo').show();
                }
                $('#next').prop('disabled', false);
            });
        }).attr('src', selectedimg);
    });
});

您每次单击都将load函数绑定到largeimage。 第一次单击load函数将调用一次,第二次将调用两次。 我怀疑一切都搞砸了,因为您在同一个对象上触发了多个.fadeIns,并且它们并行运行。

仅调用一次$('#largeImage').load(...) ,而不是每次单击。 当然,您必须对捕获的变量做一些事情,但这是另一个问题。 或者,调用$('#largeImage').unbind().load(...)

如果这很难遵循,请替换此行:

$('#largeImage').attr('src', selectedimg).load(function () {

与:

$('#largeImage').unbind().attr('src', selectedimg).load(function () {

我通过在此行之后放置一个断点来测试它:

$('#thumbs').delegate('img','click', function() {

并调用$('#largeImage').unbind(); 一切似乎都正常,因此您也可以这样做。

参见此小提琴示例,了解如何使用donehttp//jsfiddle.net/gcnes8b2/1/

$('span').click(function() {
    $('#1').fadeIn({
        duration: 1000,
        done:function(){
            $('#2').fadeOut(1000);
            // etc
        }
    });
});   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM