【问题标题】:Chrome/jQuery bug with CSS layout/animation? Workaround?带有 CSS 布局/动画的 Chrome/jQuery 错误?解决方法?
【发布时间】:2011-10-25 13:39:31
【问题描述】:

在 Chrome 中,元素的计算“top”属性可能与通过设置其样式指定的“top”属性不同。这导致我出现动画问题。似乎 jQuery animate 从查找当前 computed 样式开始,但它通过设置 specified 样式进行更新。

我想知道如何最好地解决这个问题。

我创建了一个 simple example 的问题。在 Firefox 中,在框中输入一个值,例如-500,然后单击 Go,它会为标尺的“顶部”属性设置动画,使指针指向 500。输入 499 并单击 Go,标尺几乎不会改变。现在在 Chrome 中尝试同样的操作,缩放设置为 83%。当你从 500 到 499 时,动画中会有一个大混蛋。这是因为 jQuery 是从 -416px 的计算顶部开始,然后将其动画到指定的 -499px 顶部。

更新。有人建议在动画中使用百分比值而不是像素值。那行得通-谢谢!有没有更好的方法让我坚持使用旧的基于像素的代码?

【问题讨论】:

  • 尝试将 70% 作为内部的最高值而不是绝对值,看看会发生什么。
  • 您能描述一下您的目标吗?动画应该做什么?
  • 我的动画将#inner 上下移动到指定的像素值。例如,我可能会将#inner 设置为-1000px,然后再设置为-1050px。您可以将#inner 视为显示一个高大的仪表,并且在其一侧的固定位置有一根针。
  • 当我使用 % 值而不是像素时,计算的“顶部”和实际的“顶部”确实相等。这解决了我的问题,谢谢。 (但它需要我进行令人讨厌的计算,将所有像素转换为百分比。)

标签: jquery css google-chrome jquery-animate


【解决方案1】:

如果样式位置和jQuery计算的位置有差异,则让jQuery在开始之前计算起始位置,从而消除差异。假设您的样式表明元素位于:

.mydiv {top:120px;}

但是当您开始为 div 设置动画时,Chrome 会认为该元素位于 111px...

所以,让 jQuery 获得您的起点的顶部位置,然后从那里开始动画。

var thePosition = $('div.mydiv').offset();
var endLeft = thePosition.left - 500;
var endTop = thePosition.top - 500;
$(div.mydiv').animate({top : endTop, left : endLeft}, 'fast', function(){
    // do something on end
});

【讨论】:

  • 而不是top,使用{"padding-top":"+=15px"}是相对的
猜你喜欢
  • 1970-01-01
  • 2016-06-05
  • 1970-01-01
  • 2015-01-18
  • 2013-02-23
  • 2017-01-26
  • 2018-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多