【发布时间】:2012-04-04 04:24:46
【问题描述】:
我有一个 jQuery 插件,它可以在屏幕上移动一个元素,但有一个“动画”切换来显示或不显示幻灯片过渡。在尝试使用 CSS 转换而不是 Javascript 转换进行更改时,我遇到了这个问题,我不确定这是一个错误/怪癖,还是我做错了:
var $item = $('#myItem');
if (!animate) {
$item.removeClass('csstransitions'); // Class that has "transition:left 0.25s ease-out"
$('#myItem').css('left', '300px'); // Move the element
$('#myItem').addClass('csstransitions'); // Re-apply transitions class
}
以这种方式完成后,css 更改发生在过渡类未应用到元素但之后立即应用,一些浏览器(Chrome 和 Safari,在我的测试中)仍然应用CSS 过渡,按照我的逻辑,它应该只是捕捉到新位置。
在this jsFiddle 中查看此操作;在 Chrome 或 Safari 中,单击“无延迟”按钮,会看到它仍然会为框的位置设置动画,而“延迟”按钮(使用一毫秒后设置的超时)不会为 CSS 更改设置动画.
如 jsFiddle 中所示,我必须使用 setTimeout 调用 (setTimeout(function() { $el.addClass('csstransition'); }, 1);) 才能在 Chrome 和 Safari 中获得正确的行为。这仅仅是因为 CSS 过渡是最前沿的,还是我做错了什么,并且有一种更简单的方法可以暂时“关闭”过渡?
编辑: 注意到this question 是相似的,虽然关于那个的答案是将两个调用分开,但问题仍然是“为什么我们(网络开发人员)需要分开那些两个电话?”这是我们应该用来切换 CSS 过渡的方法吗?
【问题讨论】:
-
回调函数在我的示例中不再起作用。它没有重新添加课程。
-
查看我的答案中的最后一个编辑以获得不显眼的解决方法。
标签: jquery html css-transitions