2013-05-14 4 views
1

У меня странная проблема, с которой я сталкиваюсь только на iPad. Кажется, все другие браузеры могут справиться с этим очень хорошо, но у меня есть состояние, похожее на это:Odd ParseFloat Issue Javascript

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

... rest of function 

Так, в принципе у меня есть несколько элементов, которые оживляют от действий пользователя. Чтобы пользователь не включал всю оставшуюся часть функции, я проверяю, завершил ли элемент анимацию ее непрозрачности. Useretting1 и 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)' is ... – Ian

+0

jQuery может делать $ ('element'). Is (': animated'), чтобы проверить, оживляет ли что-то, возможно это лучший тест, чем сравнение значений строки непрозрачности. http://api.jquery.com/animated-selector/ –

ответ

0

Хорошо, только что понял. IPad, кажется, анимирует мой элемент (скажем, если userSetting1 был 0,15) до 0.1503850384038439248. Итак, я должен был запустить .toFixed (2) как для пользовательской настройки, так и для .css pull.

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; };