2012-06-29 13 views
7
  1. ja ustawić rgba() BG-kolor w Chrome (Win7, 19.0.1084.56)
  2. uzyskać background-color z window.getComputedStyle(), & jest inaczej
  3. ustawić pobrana wartość na nowy element
  4. odzyskać je ponownie, różnych jej ponownie

Oto skrzypce: http://jsfiddle.net/zupa/KsuMp/Chrome getComputedStyle() zwraca zły kolor RGBA?

W moim przypadku, pierwsze 4 bloki mają następujące zawartości w Chrome:

  • BG-color: rgba (255, 0, 0, 0.503906)
  • BG-color: rgba (255, 0 , 0, 0,5)
  • BG-color: rgba (255, 0, 0, 0.496094)
  • BG-color: rgba (255, 0, 0, 0,496094)

W Firefox, otrzymuję stała rgba (255, 0, 0, 0.506)

To wydaje się być błędem. Czy możesz udowodnić, że się mylę lub zaproponować obejście? Potrzebuję koloru edytora WYSIWYG, a to zabija moje testy jednostkowe.

+0

Interesujące. Sądzę, że to błąd zaokrąglania. Jeśli użyjesz wartości "0,5" jako wartości - http://jsfiddle.net/Synmu/1/ - uzyskasz spójne wyniki (ale nie "0.5"). – fuxia

+0

@toscho - spójny wynik, który zwraca, wynosi dokładnie 1/256 od 0,5, więc widzę, że konwertuje 0.5 na x7F zamiast na x80. To ma sens, ponieważ nie mogą mapować od 1.0 do x100, ponieważ najwyższą możliwą wartością jest xFF. Czy może to być modyfikacja pasująca do dostępnej skali? – zupa

+0

Oto jeszcze gorszy przypadek: http://jsfiddle.net/zupa/KsuMp/27/ -> obniża się o 10% do 0% OMG. Ale nie spadnie z 11%: http://jsfiddle.net/zupa/KsuMp/29/ – zupa

Odpowiedz

0

W ramach obejścia problemu można spróbować zapisać oryginalny kolor RGBA w atrybucie data- * (data-original-background) w swoim elemencie i użyć wartości $().attr(), aby pobrać z niej starą wartość koloru. W ten sposób, mimo że Chrome będzie się dziwnie obchodził, będzie przynajmniej konsekwentnie okrążał każdą z nich w ten sam sposób, ponieważ wszystkie używają tej samej wartości bazowej.

Edycja: Oto jeden z twoich skrzypiec I zmodyfikowanych z koncepcją http://jsfiddle.net/aJfPn/1/

+0

również: mimo że dane- * są nazywane HTML5, ponieważ po prostu dodaje nowy element, jest kompatybilny (za pomocą różnych metod) aż do IE6. jQuery implementuje poprawną metodę modyfikowania atrybutu data- * na podstawie przeglądarki, więc nie musisz się o to martwić :) –

+0

To naprawdę nie jest opcja, ponieważ chcę zaktualizować stany kolorów, ponieważ zmiany wyboru są Strona.Problem polega na tym, że jeśli kolor bg nie jest zdefiniowany na żadnym elemencie, raczej odziedziczony z elementu macierzystego mającego klasę z definicją koloru? W przypadku definicji lokalnej równie dobrze można sprawdzić atrybut stylu. Ale dziękuję. – zupa

-1

na Uniwersytecie dowiedziałem się, że nigdy nie powinno się nigdy sprawdzić, czy pływaki są równe z powodu błędów zaokrągleń. Wystarczy dołączyć tolerancję do testu.

+1

Jeśli przypiszesz wartość zmiennoprzecinkową 10.0 i otrzymasz 9.0, i powiesz mi, że jest to błąd zaokrąglania, nie mam nic przeciwko temu, jeśli 9.0 jest stabilną wartością. Ale jeśli przypiszę mu 9.0 i otrzymam 8.0, to nie będzie stabilne. To był mój problem, nie wiedziałem, aby zaokrąglić to fikcyjne 9.0 w górę lub w dół. Wygląda na to, że jest już naprawiony w Chrome. – zupa