代码之家  ›  专栏  ›  技术社区  ›  Aaron

jQuery.animate/。每个链接

  •  0
  • Aaron  · 技术社区  · 16 年前

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

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

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

    4 回复  |  直到 11 年前
        1
  •  5
  •   David Hellsing    16 年前

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

    $(".item").each(function(i, elem) {
        var callback = $(elem).is(':last') ? function() {
            //dosomething
        } : function(){};
        $(this).animate({marginLeft:"0"}, {duration: 60, complete: callback);
    });
    
        2
  •  4
  •   Will Vousden    16 年前

    只需为动画指定一个回调,并跟踪有多少项已淡出。然后,当它们全部完成后,移除它们并添加新的。

    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('...')
            }
        });
    });
    
        3
  •  2
  •   Aaron    16 年前
    $("#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,并加载一个新页面,该页面上除了会加载$.load-ed的新项目外,其他内容都相同。

        4
  •  1
  •   maxtess    10 年前

    只需像这样更新延迟:

    $(".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>
        5
  •  0
  •   Jhonatan Pereira    7 年前

    @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
    

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

    推荐文章