0

我正在尝试结合匹配的内容,例如:

$(".item").each(function(i) {
    //animation here
});

使用 jQuery 的固有链接功能,强制动画等待前一个动画完成,例如:

$(".item").each(function(i) {
    $(this).animate({marginLeft:"0"}, 60);
});

然后在动画完成后触发 .load 函数。基本上,我想按顺序淡出四个项目[一个接一个,而不是一次全部],然后将四个新项目加载到同一个 div 中,替换前四个。

我怎样才能以可重用/可变的方式做到这一点?

4

5 回答 5

5

如何检查元素是否是最后一个元素然后添加回调?

$(".item").each(function(i, elem) {
    var callback = $(elem).is(':last') ? function() {
        //dosomething
    } : function(){};
    $(this).animate({marginLeft:"0"}, {duration: 60, complete: callback);
});
于 2010-01-04T21:42:55.213 回答
4

只需为动画指定回调并跟踪已淡出的项目数。然后,当它们都完成后,删除它们并添加新的。

var items = $('.item');
var parent = items.parent();
var itemCount = items.length;
items.each(function()
{
    $(this).fadeOut('medium', function()
    {
        itemCount--;
        if (itemCount == 0)
        {
            // Remove the items and add the new ones.
            items.remove();
            parent.append('...')
        }
    });
});
于 2010-01-04T21:44:30.280 回答
2
$("#more:not(.disabled)").live("click", function(event) {
    event.preventDefault();

    var urlPieces = (event.target.href).split("/");
    var nextURL = urlPieces[urlPieces.length - 2] + "/" + urlPieces[urlPieces.length - 1];
    var items = $(".item");
    var itemCount = items.length;   

    items.each(function(i) {
        var passthru = this;
        window.setTimeout(function() {
            $(passthru).animate({opacity:"0"}, 60, function() {
                if (i == itemCount - 1) {
                    $("#browse").load(nextURL + " .item, #controls", fadeInNew);
                }
            });
        }, 60*i);
    });
});

fadeInNew 在其他地方一个一个地处理新的淡入淡出,但这或多或少是我正在寻找的东西,它周围有一些额外的代码,可能会对正在发生的事情有所了解(在其 href 中有一个带有 url 的下一个箭头,如果javascript打开,我需要相对于当前页面的下一页的URL,如果它关闭,它会将该url作为href并加载一个新页面,该页面在页面上具有相同的内容,但新项目除外已被 $.load-ed。

于 2010-01-05T15:34:17.117 回答
1

只需像这样更新延迟:

$(".item").each(function(i) {
    $(this).delay(200*i).animate({marginLeft:"0"}, 60);
});
ul li.item {
  margin-left: 50px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li class="item">List 1</li>
  <li class="item">List 2</li>
  <li class="item">List 3</li>
  <li class="item">List 4</li>
  <li class="item">List 5</li>
  <li class="item">List 6</li>
</ul>

于 2016-06-14T14:27:50.617 回答
0

我的贡献,基于@david-hellsing算法:)

function pop_in(array_elem, index) {
    $(array_elem[index]).animate({
        width: 'toggle',
        height: 'toggle'
    }, 700)// callback will be a promise
    .promise()
    .then(() => {
        $(array_elem[index]).css({visibility: 'hidden'}); //hide after reduce size

        if(index > 0)
            pop_in(array_elem, --index) //recursive call
        else
            console.log("Animation finished. Execute another function from here.");
    });
}
const items_menu = $(".item");
pop_in(items_menu, items_menu.length-1); //start from last to first element

请注意,您可以根据自己的目的更改宽度和高度属性。

于 2019-04-17T17:09:39.480 回答