javascript - La función de Raphael.js getBBox devuelve NAN/NAN/NAN en IE8
internet-explorer-8 (2)
Encontré una solución alternativa de esta respuesta a la pregunta "Raphael JS y posicionamiento de texto"
Si uso _getBBox()
lugar de getBBox()
todo está funcionando en ie 8 también.
_getBBox () no está documentado pero lo usa internamente Raphael, ¡y funciona!
usando Raphaël 2.1.4 - JavaScript Vector Library haga algo como eso:
var textDummy = paper.text(50,500, ''hello world'').attr({fill: ''transparent'', ''font-size'': 14});
var textBox = textDummy.getBBox();
con Chrome y Firefox todo está bien, pero en IE8 devuelve NaN / NaN / NaN, por ejemplo textBox.height es NaN.
¿Cómo puedo arreglar esto?
Tuve el mismo problema en Rapahel 2.2.0 y 2.2.1, y al usar ._getBBox()
no lo solucioné.
Lo que sí lo solucionó es volver a caer en .auxGetBBox()
si está definido y el .getBBox()
regular no funciona, así:
var bbox = path.getBBox( );
// Workaround for apparent bug in Raphael''s VML module''s getBBox() override
if( isNaN( bbox.x ) && path.auxGetBBox ){
bbox = path.auxGetBBox();
}
No tengo una solución para el error subyacente, pero he encontrado la fuente de la misma.
En el modo VML, Raphael toma la función getBBox()
inicial, la guarda como auxGetBBox()
en el prototipo del elemento y luego la reemplaza con una función que parece estar rota.
Tiene cálculos basados en una variable definida como var z = 1/this.paper._viewBoxShift.scale;
, que claramente espera que _viewBoxShift.scale sea un factor de la escala del viewbox actual en comparación con el viewbox inicial, pero en realidad _viewBoxShift.scale
es un objeto como este que parece provenir de paperproto.getSize()
:
{ height: someNumber, width: someNumber }
De aquí provienen todos los NaN
. Cannas se dividen por un objeto.
Así que esta solución funciona bien si no se aplica el zoom usando viewbox, pero puede dar resultados incorrectos si se ha aplicado un zoom (algo que no puedo poner en práctica en las versiones recientes de Rafael en modo VML, pero esa es una pregunta separada) ) La reparación implicará profundizar en el módulo VML de Raphael para canalizar un factor de zoom adecuado en esta variable z
.