【发布时间】:2013-04-06 00:30:21
【问题描述】:
我的页面上有一个 Flash 元素,由于 Flash 通常非常精细,因此需要将其定位在整数像素值处(如果需要详细信息,请参阅 Flash webcam access request prompt unresponsive)。
我通过将object 包装在div 中、在object 上设置position:absolute 并使用jQuery 将left 和top 设置为圆角的offset 来实现这一点包含div。那是一口,这里是代码形式:
<div id="wrapper">
<object id="flash" blah style="position:absolute">
<!-- blah -->
</object>
</div>
<script>
function update(){
var p=$('#wrapper').offset();
$('#flash').css({'left':Math.round(p.left),'top':Math.round(p.top)});
}
$(document).ready(function(){
$(window).resize(update);
update();
});
</script>
而且一切都很好(如果上面的代码有错误,那只是将其删减)
这将在浏览器改变大小时更新位置,当位置被一些 JavaScript 改变时更新它很容易,但是页面也使用 CSS transition-duration 来动画一些变化。我怎样才能检测到这个?至少,我想检测影响对象的过渡何时发生,并知道它何时停止。理想情况下,我想知道如何捕捉任何运动(例如由字体大小更改或图像加载引起的)。
【问题讨论】:
-
有一些关于过渡的事件,但我不知道它们有多大用处
-
您可以检测到过渡何时完成,但仍无法检测到过渡何时开始,至少我不知道。搜索 transitionend 事件
-
@roasted 谢谢,这是一个开始。它至少现在最终定位正确。如果可能的话,我仍然想在动画期间定位它。致未来的读者:
.on('transitionend webkitTransitionEnd oTransitionEnd otransitionend',update); -
所以我想没有一个理想的解决方案。也许,在制作动画之前,您可以使用 JS 来检测是否设置了 CSS 过渡。而且我不知道这是否适用于您的情况,但也许最好使用 translate 移动元素; Paul Irish wrote a good article about this.
-
@sroes translate 不适用,遗憾的是。这样做的重点是删除子像素定位,但 translate 支持子像素并且不够聪明,无法采用方程参数(我需要通过
floor(absolute_coord) - absolute_coord进行翻译)。
标签: javascript jquery dom css-transitions