【发布时间】:2016-11-27 22:39:46
【问题描述】:
我遇到了过渡问题。
我在 left 属性上有一个过渡。我想从左边移动一个 div:860px 到 -860px 没有过渡,然后将它移动到 0px 有过渡。
如果我删除了给元素过渡的类,应用一个给它左边-860px 的类,这很好。没有过渡。
但是,由于我想在将 left 更改为 0px 之前对其应用过渡,所以我再次添加过渡类,并给它一个 left: 0 类。当我在 Chrome 中执行此操作时,它会应用过渡元素在到达 -860px 位置和 0 的途中。所以不是我想要的。
我也想避免两者之间的延迟。但我不认为有一个事件告诉我 Chrome 何时在 -860px 处重新渲染了元素。有什么想法吗?
这是一些示例代码。有转换的类:
.div-transition {
-webkit-transition:all 0.8s ease-in-out;
-moz-transition:all 0.8s ease-in-out;
-o-transition:all 0.8s ease-in-out;
transition:all 0.8s ease-in-out;
}
$(".div-to-transition").removeClass('div-transition');
$(".div-to-transition").css('left', '-860px'); // So far so good, if I don't add the next two lines.
$(".div-to-transition").addClass('div-transition');
$(".div-to-transition").css('left', '0'); // Now it applies a transition as we move left to -860px, AND from -860px to 0.
【问题讨论】:
-
分享一些代码...
-
如果你仍然需要 jQuery,我想我只需使用
style.left设置 left 属性,然后添加一个类,这样你就不需要尝试检测 if/when该元素位于-860px。如果您想尝试但遇到困难,请添加一些代码。 -
@eskimo - 我添加了一些示例代码。
-
element.scrollWidth;在这一行之后 chrome 应该重新渲染了元素;无需等待。或者element.getBoundingClientRect();如果 chrome 试图变得聪明;) -
@Thomas - 谢谢。我尝试了 $element[0].scrollWidth ,它似乎正在工作。尚未尝试 FF / IE11。
标签: javascript jquery css css-transitions transitions