entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Divisiones decimales en javascript diferentes S.O.

Quisiera que me orienten un poco con un problema que estamos teniendo en un plugin (Revolution Slider).
Al parecer, tiene una funcion que realiza un calculo en el cual tomo las dimesiones con las cuales se seteo el contenedor del slider y ajusta el ancho y alto de las imagenes a ese contenedor.
Pero esta sucediendo algo bastante extraño para mi, por lo menos fue la primera vez que me paso.
Yo uso Ubuntu, uno de mis compañeros utiliza el sistema operativo de Apple (tiene una Mac) y por ultimo esta otro de mis compañeros que usa Windows, como asi tambien el cliente. A esto sumenle Android y Windows Phone.

Resulta que cuando estamos realizando pruebas para comprobar el correcto funcionamiento en OS X y Ubuntu el slider funciona perfectamente (asi tambien en Android), pero cuando esas pruebas se realizan bajo el sistema operativo de Windows (XP o 7 es indistinto) empiezan los problemas.
Partimos de la base que estamos usando exactamente los mismos navegadores para las pruebas (Firefox y Chrome en todos los OS, IE en Windows y Reqonk en OS X y Ubuntu).

Cuando me pongo a mirar mas detenidamente me doy cuenta que el problema esta en la division, ya que utilizando los mismos navegadores en Ubuntu y OS X nos da un valor mientras que en Windows difiere en unas decimas lo cua termina haciendo que cuando se completo la carga de la imagen esta se mueva 1px o 2px y queda como si fuera un "saltito" (palabras del cliente).

Si bien comprendo que Javascript se ejecuta del lado del cliente, alguna vez le habia sucedido a alguien? es esto un bug el cual se deberia reportar a los desarrolladores del plugin?

0voto

Leonardo-Tadei comentado

Hola @jmpineiro,

te sirvió alguna de las respuestas? De ser así, seleccioná alguna así queda el tema cerrado.
Si encontraste una solución mejor, publicala y parcala, así queda el tema cerrado.

Saludos!

0voto

jmpineiro comentado

@Leonardo-Tadei no lamentablemente ninguna de las respuestas ha logrado ayudarme a corregir el inconveniente. El problema tal y como lo plantee persiste asi que decidi cambiar el modo en que el Slider se visualiza.
Dejare pendiente esta pregunta, a fin de que otro pueda llegar con alguna idea o solucion.

Saludos,

0voto

Leonardo-Tadei comentado

Pero, probaste pasar por parseInt() los valores de los píxeles ???

0voto

jmpineiro comentado

Si, lo probe. Pero por alguna razon, hay un redondeo que hace que en Windows tenga un numero y en Linux / Apple otro haciendo que para algunos navegadores en Windows la imagen salte luego de cargarla completamente.
Tambien se reporto esto al sitio de los desarrolladores del Slider y tampoco han respondido aun.

0voto

Leonardo-Tadei comentado

Si pusieras el código que et da podríamos ayudarte entre todos... de otra forma creo que esto quedará para siempre como una pregunta sin solución :-(

2 Respuestas

2votos

Yo diría que el problema está en la precisión de cada máquina y que una posible solución sería hacer un redondeo en la función que realiza la división quedándonos sólo con dos decimales por ejemplo. Creo que de esa forma el problema se resolvería.

Así que, como opciones te plantearía: modificar el plugin para corregir ese comportamiento, reportar el comportamiento a los desarrolladores del plugin y esperar a ver si deciden cambiarlo o buscar un nuevo plugin.

Espero haber podido ayudarte.

Saludos.

0voto

jmpineiro comentado

Humberto,

Me imagine de ese comportamiento, pero la verdad no creia que fuera posible. Se que el punto flotante es un tema bastante delicado de manejar.

Se les aviso a los desarrolladores del plugin pero no se puede corregir porque el archivo javascript que contiene el problema esta dentro de un template y fue minimizado (y ofuscado, creo que tambien es el termino).

No es posible ni cambiar ni usar otro porque este ya viene completamente integrado con al template, eso tambien es todo un tema.

0voto

humberto_garcia_caba comentado

Hola jmpineiro,

si el plugin hace todo el trabajo internamente (es decir, llamas a una función, por ejemplo, que es la que se encarga de generar todo el HTML y crear el slider) la única opción que se me ocurre es tratar de averiguar en qué parte del código se está realizando la división para que devuelva siempre un entero (como propone leonardo-tadei) o hacer un redondeo siempre de la misma forma (por ejemplo, si tenemos 0.576 que redondee a 0.58) eso ya es decisión tuya. Aunque el fichero esté minimizado y ofuscado, puedes depurarlo. El depurador de Chrome, por ejemplo, tiene una opción que se llama pretty print (está en la pestaña de Sources, abajo a la izquierda, es un icono que aparecen dos llaves '{}') el cual intenta mostrarte el código de un fichero javascript bien formateado. De esta forma podrías poner puntos de interrupción e ir viendo por donde anda la cosa. Es una tarea pesada pero...si no tienes los originales no se me ocurre otra alternativa.

Espero haberte sido de ayuda.

Un saludo.

2votos

Leonardo-Tadei Puntos227040

Hola,

en la ínea de lo que dice Humberto, debe ser una cuestión de presición (cantidad de decimales significativos) entre plataformas.

Sin embargo, hay algo que me confunde: si el problema aparece en un slider, en que lo que movés son píxeles, y estos son un valor entero, pareciera que el problema de implementación que tienen es que se están usando decimales en vez de enteros para los cálculos.

Posiblemente sea simple conseguir el mismo resultado entre plataformas haciendo que todas las operaciones se guarden en enteros, forzando a JavaScript a hacer esto en vez de su comportamiento por default que es adaptar el tipo de la variable al contenido.

Tal vez el método parseInt() sea suficiente, aplicado a las variables que tienen el resultado.

Saludos!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta