【发布时间】:2013-05-14 20:55:57
【问题描述】:
我有一个奇怪的问题,我只在 iPad 上遇到过。似乎所有其他浏览器都可以很好地处理这个问题,但我有一个类似的情况:
if( parseFloat( $('#element1').css('opacity'),10).toFixed(2)!=userSetting1 ||
parseFloat( $('#element2').css('opacity'),10).toFixed(2)!=userSetting2
){ return; };
... rest of function
所以,基本上我有几个元素可以根据用户操作进行动画处理。为了防止用户连续触发该功能的其余部分,我正在测试该元素是否已完成对其不透明度的动画处理。 usersetting1 和 2 是用户将 element1 和 2 分别设置为动画的不透明度。
所以,基本上,如果不透明度没有达到用户设置的不透明度,它就会退出该功能。除了 iPad 之外,它在任何地方都可以很好地工作,而且它基于 parseFloat 的问题。
如果用户将 0.15、0.25 等设置为他们的不透明度设置,则 parseFloat(,10).toFixed(2) 将起作用并允许条件正确测试。
但是,如果用户将不透明度设置为 1 或 0,则会搞砸一切。显然 iPad 不认为 1.0 = 1。
如果有办法解决这个问题?
【问题讨论】:
-
一些我见过的最奇怪的代码格式。但是 +1 好问题。
-
可能因为某种原因变成了
0.99?我感觉它在某种程度上与浮点运算有关。虽然我不确定你的parseFloat(,10).toFixed(2)是什么... -
jQuery 可以使用 $('element').is(':animated') 来测试是否有动画效果,也许这比比较不透明度字符串值更好。 api.jquery.com/animated-selector
-
比较浮点数时,最好使用
<=或类似的比较,而不是toFixed 和==,因为您可能会得到非常小的舍入差异,使它们@ 987654327@。例如if (x - userSetting <= 1e-10)
标签: javascript jquery ipad parsefloat