2012-02-17 23 views
8

¿Hay alguna manera en javascript/jQuery de tomar dos variables con valores "60px" y "40px" y agregarlas para obtener "100px"?¿Añadir valores de píxeles de JavaScript?

o en un sentido más general, estoy tratando de calcular las posiciones de los objetos en relación con otros objetos y sería muy conveniente si podía hacer algo como esto:

$('#object2').css('left', $('#object1').css('left')+'60px'); 

Por supuesto, eso sólo da en "40px60px" no válido.

Respuesta

13

quitar píxeles de cuerdas, agregar valores, a continuación, añadir px volver

(parseInt("40px".replace(/px/,""))+60)+"px" 
+0

que me da "4060px "en el registro de la consola de Chrome. Sin embargo, usando parseInt como lo sugieren otras respuestas obtengo "100px" de esta modificación: '(parseInt (" 40px ".replace (/ px /," ")) + 60) +" px "' – joshuahedlund

+0

Correcto, mi error, debería pon el número al frente, de lo contrario, agrega cadenas. parseInt hace que el número salga de la cadena, por lo que debería funcionar bien también. –

4

Usted está buscando la función parseInt().

var left1 = "40px"; 
var left2 = "60px"; 

// Add the integer values of the left values together 
var leftTotal = parseInt(left1, 10) + parseInt(left2, 10) + "px"; 

También vale la pena investigar es el método parseFloat(). Hace lo mismo que parseInt(), pero funciona en números con decimales (también conocidos como valores de coma flotante).

0

Usted puede hacer esto mediante el análisis del valor css.left del objeto, algo como esto:

$('#object2').css('left', (parseInt($('#object1').css('left')) + 60) + 'px'); 

embargo, usted debe tener en cuenta, que el valor css.left podría no ser px pero también %, em, etc. así que la manera limpia sería usar jQuery offset method ya que eso le daría el valor de píxeles correcto.

$('#object2').css('left', ($('#object1').offset().left + 60) + 'px'); 
1
var shiftedRight = (parseFloat($('#object1').css('left')) + 60) + 'px'; 
$('#object2').css('left', shiftedRight); 

parseFloat analizará sólo el prefijo de la cadena que es un número.

4

Probablemente la forma más eficiente es

parseInt("40px", 10) + parseInt("60px", 10) + "px" 

Los 10 's en las llamadas parseInt sean necesarias para proteger contra el valor que se calcula por error en algo que no sea la base 10.

+0

Parece que no funciona en Chrome, parece que obtengo un NaN hasta que se elimina el componente 'px' – sradforth

+0

Creo que esta es una mejor respuesta, ya que ** 1: ** pregunta era: _two ** variables ** con valores "60px" y "40px" _, y en la respuesta aceptada, el segundo valor no es una variable, ** 2: ** 'parseInt' convertirá '40px' a 40, por lo que no es necesario' replace (/ px/, "") '. Agregar '+" px "' debe convertir entero en cadena, de la misma manera que lo está haciendo en la respuesta aceptada. Esta solución funciona como debería, así que ¿alguien puede explicar por qué @wheresrhys obtendría NaN? – papo

Cuestiones relacionadas