【问题标题】:Jquery animation after long DOM append长 DOM 追加后的 Jquery 动画
【发布时间】:2013-03-01 06:30:21
【问题描述】:

我想从右到左为 div 设置动画。在此之前,我必须在其中附加 long dom。如果我一起做动画不流畅。请参阅此Fiddle 进行现场演示。

单击“单击 1” - 制作流畅的动画。
点击“重置”。
点击“点击 2” - 动画效果不佳。

-有什么帮助吗?

HTML:

<div>
    <div id="main-div" style="display: inline-block">
        <div id="div-1" class="inner-div">
        </div>
        <div id="div-2" class="inner-div" style="left: 300px; background-color: yellow">
        </div>
    </div>    
    <div style="display: inline-block; vertical-align: top">
        <input type="button" value='Call 1' onclick='DoAnimate(15)'/>
        <input type="button" value='Call 2' onclick='DoAnimate(4000)'/>        
        <input type="button" value='Reset' onclick='Reset()'/>
    </div>
</div>

JS:

function DoAnimate(count)
{
    $("#div-2").empty();

    for(var i = 0; i < count; i ++)
    {
        $("#div-2").append("<div> DIV " + i + "</div>");
    }

    $("#div-1").animate({left: -300}, 300);
    $("#div-2").animate({left: 0}, 300);
}

function Reset()
{
    $("#div-2").empty();

    $("#div-1").animate({left: 0}, 300);
    $("#div-2").animate({left: 300}, 300);
}

CSS:

#main-div
{
    position: relative;
    height: 400px;
    width: 300px;
    background-color: red;
    overflow: hidden;
}

.inner-div
{
    height: 400px;
    width: 300px;
    background-color: pink;
    position: absolute;
    top: 0px;
    left: 0px;
    overflow: auto;
}

【问题讨论】:

  • 您可以通过使用原生 DOM API 来提高附加性能(documentFragments 尽可能避免浏览器解析 HTML),但如果您只想等待回流,只需查询请求动画之前对象的计算样式。
  • 追加需要 long 时间。你当然也应该优化它(如果小提琴中的场景是现实的)。

标签: jquery html jquery-animate


【解决方案1】:

基本上,简所说的。

将这些新构造的元素附加到 documentFragment 或 jQuery 对象而不是 DOM。

    ...
    $("#div-2").empty();
    var $wrapper = $('<div />');
    for(var i = 0; i < count; i ++) {
        $wrapper.append("<div> DIV " + i + "</div>");
    }
    $("#div-2").append($wrapper)    
    ...

http://jsfiddle.net/72CdX/

【讨论】:

  • $wrapper 方法比直接方法快得多,但仍然太慢。仍然是一个不错的方法。
  • @JanDvorak 我们能比这种方法更快吗?
  • @user10 documentFragments... 但我没有任何使用它们的经验。 jQuery 不支持它们,因此您必须深入研究原生 DOM 操作领域(这始终是一个很好的学习体验)
  • 基本上,它们的行为类似于普通的 DOM 节点,只是它们在附加到任何地方时会被其内容替换。
  • @JanDvorak 谢谢。让我也试试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 1970-01-01
  • 2011-12-13
相关资源
最近更新 更多