0

所以我有 3 张图片,当用户点击它时,它会变成另一张图片。但是我想添加一个jQueryfadeOutfadeIn给出切换过程的过渡效果。这是我想出的,但它不起作用,知道吗?

$(".chosen").click(function() {     
    var src = $(this).attr("src");      
    if (src == "blank.png") (function() {
        $(this).fadeOut(400);
        {
            $(this).attr("src", "ex.png").fadeIn(400);      
        }
    });

    else if (src == "ex.png") (function() {
        $(this).fadeOut(400);
        {
            $(this).attr("src", "oh.png").fadeIn(400);          
        }
    });

    else (function() {
        {
            $(this).fadeOut(400);
            $(this).attr("src", "blank.png").fadeIn(400);       
        }
    });
});
4

1 回答 1

1

您应该更改图像的来源并在fadeOut动画完成后重新过渡。

当动画完成渲染时, fadeOut文档显示了complete一个回调参数。

$(this).fadeOut(400, function(){/*code to be executed when animation finishes*/});

在您的示例中,您可以执行以下操作:

$(this).fadeOut(400, function(){
    $(this).attr("src", "ex.png").fadeIn(400); 
});

您可以重构代码以减少冗余代码,如下所示:

$(".chosen").click(function() {     
    var $this = $(this); // avoid calling $ multiple times

    $this.fadeOut(400, function() {
        var src = $this.attr("src");    
        var newSrc = "";

        // this if/else block could be refactored further
        if (src == "blank.png") {
            newSrc = "ex.png";
        }
        else if (src == "ex.png") {
            newSrc = "oh.png";
        }
        else { // if src == "oh.png"
            newSrc = "blank.png";
        }

        $this.attr("src", newSrc).fadeIn(400);
    });
});
于 2013-03-09T03:24:22.913 回答