2012-06-29 21 views
7
  1. puse un RGBA() bg color en Chrome (Win7, 19.0.1084.56)
  2. me sale el color de fondo con window.getComputedStyle(), & es diferente
  3. fijo el valor recuperado en un nuevo elemento
  4. puedo recuperarlo de nuevo, su nuevo diferente

Aquí es un violín: http://jsfiddle.net/zupa/KsuMp/Chrome getComputedStyle() devuelve un color RGBA incorrecto?

En mi caso, los 4 primeros bloques tienen el siguiente contenido en cromo:

  • 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)

En Firefox, consigo rgba constante (255, 0, 0, 0,506)

Por lo tanto, esto parece ser un error. ¿Puedes probar que estoy equivocado o sugerir una solución alternativa? Necesito el color para un editor wysiwyg y esto está matando mis pruebas unitarias.

+0

Interesante. Supongo que es un error de redondeo. Si usa '0.5' como valor - http://jsfiddle.net/Synmu/1/ - obtiene resultados consistentes (pero no' 0.5'). – fuxia

+0

@toscho - el resultado consistente que devuelve es exactamente 1/256 lejos de 0.5, por lo que veo que convierte 0.5 a x7F en vez de x80. Lo cual tiene sentido ya que no pueden asignar 1.0 a x100 ya que el valor más alto posible es xFF. ¿Entonces eso puede ser un ajuste para adaptarse a la escala disponible? – zupa

+0

Aquí hay un caso aún peor: http://jsfiddle.net/zupa/KsuMp/27/ -> desciende de 10% a 0% OMG. Pero no baja del 11%: http://jsfiddle.net/zupa/KsuMp/29/ – zupa

Respuesta

0

Como solución alternativa, puede tratar de almacenar el color RGBA original en un atributo data- * (data-original-background quizás?) En su elemento y use $().attr() para obtener el valor de color anterior desde allí. De esta forma, aunque Chrome redondeará de forma extraña, al menos redondeará sistemáticamente cada uno de la misma manera porque todos usan el mismo valor base.

Editar: Aquí está uno de sus violines he modificado con el concepto http://jsfiddle.net/aJfPn/1/

+0

también: a pesar de que data- * se llama HTML5, ya que solo agrega un nuevo elemento, es compatible (a través de varios métodos) hasta IE6. jQuery implementa el método correcto para modificar el atributo data- * por navegador para que no tenga que preocuparse :) –

+0

Esto no es realmente una opción ya que quiero actualizar los estados del color a medida que la selección cambia en la página.El problema es, ¿qué pasa si el color bg ni siquiera está definido en un elemento dado, más bien se hereda de un elemento padre que tiene una clase con la definición de color? Para una definición local, también podría verificar el atributo de estilo. Gracias de cualquier forma. – zupa

-1

En la universidad aprendí que nunca se debe probar nunca si los flotadores son iguales debido a errores de redondeo. Solo incluya una tolerancia en su prueba.

+1

Si asigna un flotante 10.0 y recupera 9.0, y me dice que es un error de redondeo, estoy de acuerdo si 9.0 es un valor estable. Pero si lo asigno 9.0 y recupero 8.0, entonces ni siquiera es estable. Ese era mi problema, no sabía redondear ese ficticio 9.0 arriba o abajo. Por ahora parece estar arreglado en Chrome. – zupa

Cuestiones relacionadas