webkit translateX动画正在回归初始位置

时间:2010-01-07 02:33:51

标签: css webkit css3

我正在尝试为移动webkit创建图片库,

实际上足够快的唯一方法是使用硬件加速的translateX。

我的问题是div在动画结束时收回其初始位置。我在左侧按钮上添加了slideGalLeft类。到动画div

您可以在回调事件部分中看到此处的示例: http://position-absolute.com/jqtouch/demos/main/#home

    .slideGalLeft {
    -webkit-animation-name: slideColis;
}


@-webkit-keyframes slideColis {
    from { -webkit-transform: translateX(0%); }
    to { -webkit-transform: translateX(-100%); }
}

4 个答案:

答案 0 :(得分:13)

不要使用webkit动画,因为它会在播放后返回默认值。 而是定义

.slideGalleft{
    -webkit-transition: -webkit-transform 1s linear;
    -webkit-transform: translateX(0%);
}

并使用Javascript,设置-webkit-transform: translateX(100%);或将CSS类添加到设置最终转换值的元素,webkit将为其设置正确的动画

答案 1 :(得分:5)

Guillaume的回答很棒。但是,如果您正在寻找硬件加速,您必须让webkit引擎知道您想要3D渲染(使硬件加速活跃的原因)。

根据http://www.html5rocks.com/tutorials/speed/html5/#toc-hardware-accell,这是通过将translateZ(0)添加到您的规则来完成的,如下所示:

.slideGalleft{
    -webkit-transition: -webkit-transform 1s linear;
    -webkit-transform: translateX(0%) translateZ(0);
}

除此之外,请遵循纪尧姆的建议。

答案 2 :(得分:4)

使用:

-webkit-animation-fill-mode: none/backwards/forwards/both;

这允许您定义动画结束时元素保留在动画的哪一端。

答案 3 :(得分:2)

我能够通过在动画结束时添加“display:none”样式来使其工作。使用以下CSS:

.paused {
    -webkit-animation-play-state: paused;
}

.hiddendiv {
    display:none;
}

然后在你的jQuery代码中:

$('div.sideimage').click(
    function () {
        $(this).removeClass("paused").delay(2000).queue(
            function(next) {     
                $(this).addClass("hiddendiv");     
                next();
            }
        ); 
    }
);

应该工作!