【问题标题】:Showing a series of <div>s in a predefined order以预定义的顺序显示一系列 <div>
【发布时间】:2016-03-01 07:05:19
【问题描述】:

我正在构建一个动画,我希望随着时间的推移出现一系列 &lt;div&gt;s(将它们的不透明度从 0 更改为 1),按照我分配给它们的顺序。到目前为止,我已经完成了第一部分:&lt;div&gt;s 一个一个出现在屏幕上。

这是我的 HTML:

<div id="parent_container">
<div n="2">1</div>
<div n="1">2</div>
<div n="3">3</div>
<div n="4">4</div>
<div n="5">5</div>
<div n="7">6</div>
<div n="6">7</div>
<div n="8">8</div>
<div n="9">9</div>
</div>

(带有一些 CSS 用于背景颜色、不透明度等)这是我的功能:

var delay = 0;
$('div').each(function(){
    $(this).delay(delay).animate({
        opacity:1,
    },500);
    delay += 500;
});

你可以在这里摆弄我的代码:http://jsfiddle.net/VS8tQ/250/

但是现在我想在动画运行时对那些&lt;div&gt;s 进行排序,以便&lt;div n="1"&gt;(在本例中为“2”)出现在&lt;div n="2"&gt;(在本例中为“1”)之前。我需要的似乎与此处提出的问题非常相似:How to sort DOM elements while selecting in jQuery?(其解决方案已复制为上述小提琴中的评论)。但我似乎无法让它使用与@id 不同的属性,这对我来说是个问题(因为我需要该属性来做其他事情)。

有什么建议吗?

【问题讨论】:

    标签: jquery jquery-animate


    【解决方案1】:

    您可以使用以下方式对元素进行排序:

    Updated Example

    $('.circle[n]').sort(function(a,b) {
         return $(a).attr('n') > $(b).attr('n');
    }).appendTo('#parent_container');
    

    【讨论】:

    • 谢谢!!结果如下:jsfiddle.net/VS8tQ/253 完美运行!
    • 我使用 IRL 的订单比示例中的订单要长得多;而且我注意到 Chrome 在较长的列表中遇到了困难。在 Firefox 和 Safari 中运行良好,但 Chrome 以随机顺序对它们进行动画处理,而不是 sort()-ed ——即使只有 20 个项目。你知道Chrome的问题是什么吗?如果有办法解决它?
    • @WoutDillen 如果您发布示例,我会看一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多