检测由CSS转换引起的HTML元素的移动

时间:2013-04-13 14:42:48

标签: javascript jquery dom css-transitions

我的页面上有一个Flash元素,因为Flash通常非常精致,所以需要将其定位为整数像素值(如果需要详细信息,请参阅Flash webcam access request prompt unresponsive。)

我通过将object包裹在div中,在position:absolute上设置object,并使用jQuery设置left和{来实现此目的{1}}到包含top的四舍五入offset。这是一口,这是代码形式:

div

这一切都很有效(如果上面的代码有错,那只是将其删除)

这将在浏览器更改大小时更新位置,并且当某些JavaScript更改位置时,它很容易更新,但页面也使用CSS <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> 来动画一些更改。我怎么能发现这个?至少,我想检测何时发生影响物体的过渡,并知道何时停止。理想情况下,我想知道如何捕捉任何移动(例如由字体大小更改或图像加载引起)。

1 个答案:

答案 0 :(得分:0)

你可以查看这个小提琴:http://jsfiddle.net/DpYNm/ 它记录了一个动作开始和结束时,我不确定它是否是你问题的解决方案,但它可能会帮助你朝着正确的方向前进!

function checkForMove() {
if ($('#testDiv').prop('user_default_width') === undefined) {
    $('#testDiv').prop('user_default_width', $('#testDiv').width());
    $('#testDiv').prop('user_is_moving', false);
}

if ($('#testDiv').width() != $('#testDiv').prop('user_default_width') && !$('#testDiv').prop('user_is_moving')) {
    $('#log').html($('#log').html() + "Move started<br/>");
    $('#testDiv').prop('user_is_moving', true);
}
if ($('#testDiv').width() == $('#testDiv').prop('user_default_width') && $('#testDiv').prop('user_is_moving')) {
    $('#log').html($('#log').html() + "Move ended<br/>");
    $('#testDiv').prop('user_is_moving', false);
}

setTimeout(checkForMove, 1);

}

checkForMove();

每隔ms调用一次checkForMove,在第一次调用中,它会将div的宽度保存到属性中。每次更改(转换开始)时,它都会记录并保存一个帮助器属性,以确保它不会再次记录,直到转换回到默认大小。我相信你可以根据自己的需要改变那个部分! :)