2013-05-14 84 views
1

我有一個奇怪的問題,我只在iPad上遇到。似乎所有其他瀏覽器都能就好處理這個問題,但我有一個類似的條件:奇怪的ParseFloat問題Javascript

if(parseFloat($('#element1').css('opacity'),10).toFixed(2)!=userSetting1 || 
    parseFloat($('#element2').css('opacity'),10).toFixed(2)!=userSetting2 
){ return; }; 

... rest of function 

所以,基本上我有一對夫婦,從用戶操作動畫元素。爲了防止用戶持續觸發其餘的功能,我正在測試以查看元素是否完成了其不透明動畫。用戶設置1和2是用戶分別將元素1和2設置爲動畫的不透明度。

因此,基本上,如果不透明度未達到用戶設置的不透明度,則會退出該功能。在任何地方都能很好地工作,除了iPad,它基於parseFloat的問題。

如果用戶將0.15,0.25等設置爲不透明度設置,則parseFloat(,10).toFixed(2)將起作用並允許條件正確測試。

但是,如果用戶爲不透明度設置1或0,則會將所有內容擰緊。顯然iPad不認爲1.0 = 1.

如果有什麼辦法解決這個問題?

+0

一些最古怪的代碼格式我見過。但+1好問題。 – sgroves

+0

由於某種原因,它可能變成「0.99」嗎?我有一種感覺,它在某種程度上與浮點運算有關。雖然我不確定你的'parseFloat(,10).toFixed(2)'是... – Ian

+0

jQuery可以做$('element')。is(':animated')來測試是否有動畫,或許與比較不透明字符串值相比,這是一個更好的測試。 http://api.jquery.com/animated-selector/ –

回答

0

好吧,只是想出了這一點。 iPad似乎將我的元素(例如,如果userSetting1爲0.15)動畫爲0.1503850384038439248。所以,我不得不在用戶設置和.css拉上運行.toFixed(2)。

0
var iOS = parseFloat(('' + (/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0,''])[1]) 
    .replace('undefined', '3_2').replace('_', '.').replace('_', '')); 
if(iOS ($('#element1').css('opacity'),10).toFixed(2)!=userSetting1 || 
iOS ($('#element2').css('opacity'),10).toFixed(2)!=userSetting2){ return; };