【问题标题】:CSS Transition not being executedCSS 过渡未执行
【发布时间】:2012-07-19 03:31:30
【问题描述】:

我目前正在尝试为轮播类型容器中的两个 div 元素设置动画。这是 DOM 中出现的标记:

<div id="transitioner" style="width: 2880px; height: 775px; left: -1440px; ">
    <div id="view1" class="view active" style="width: 1440px; height: 775px; ">
        <header>
            <h1>This is page 1</h1>
        </header>
        <article style="height: 699px; ">
            <p>Tap me anywhere to go to the next view</p>
        </article>
        <footer>
            <p>This is my footer</p>
        </footer>    
    </div>
    <div id="view2" class="view" style="width: 1440px; height: 775px; ">
        <header style="">
            <h1>This is page 2</h1>
        </header>
    </div>
</div>

这是 #transitioner 元素的 CSS:

#transitioner {
    position: absolute;
    top: 0;
    -webkit-transition: all 0.2s ease-in-out;
}

最后是JS:

function GotoView(view)
{
    var roller = $('<div id="transitioner" />');
    roller.width((viewport.width * 2)).height(viewport.height);
    var current = $('.view.active').clone(true, true);
    $('.view.active').remove();
    current.prependTo(roller);

    var new_view = view.clone(true, true);
    view.remove();
    new_view.appendTo(roller);

    roller.appendTo($('body'));
    $('body').addClass('transitioning');
    //window.setTimeout(function() { roller.css({ left: 0 - viewport.width }) }, 2000);
    roller.css({ left: 0 - viewport.width });
}

我更新了包含div(即#transitioner)的左侧位置,但除非我输入setTimeout,否则CSS 转换不会执行,而是包含div 只是“跳转”到所需的新left 偏移量。

我已经整理了一个 jsFiddle,所以你可以看到症状 > http://jsfiddle.net/XPUPQ/

我的问题是:这是怎么回事,没有使用 JS setTimeout() 有什么办法可以规避这个问题吗?

【问题讨论】:

    标签: jquery mobile css webkit css-transitions


    【解决方案1】:

    你需要触发浏览器重排

    http://jsfiddle.net/XPUPQ/1/

    例如,您可以使用 $("body")[0].offsetWidth; 来做到这一点。

    这实际上是一种合法的技术,例如twitter bootstrap uses

    【讨论】:

    • 我为什么说“例如”太多了
    • 听起来比“perkele”好。
    • 呵呵,感谢帮助,以前从来没有遇到过这个bug,也不知道会导致浏览器回流。知道为什么我们需要这样做吗?
    • @BenM 因为浏览器优化太多 :P 也许这有帮助 stackoverflow.com/a/6496557/995876
    猜你喜欢
    • 2014-04-15
    • 2011-10-27
    • 2015-06-22
    • 1970-01-01
    • 2014-04-21
    • 2010-10-14
    • 2013-07-20
    • 1970-01-01
    • 2014-03-30
    相关资源
    最近更新 更多