2012-02-17 13 views
8

Czy istnieje sposób w javascript/jQuery, aby pobrać dwie zmienne o wartościach "60px" i "40px" i dodać je razem, aby uzyskać "100px"?Dodać wartości pikseli javascript?

Albo w bardziej ogólnym sensie, próbuję obliczyć położenia obiektów względem innych obiektów i byłoby bardzo wygodne, jeśli mogę zrobić coś takiego:

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

oczywiście, że tak podaje nieprawidłowy "40px60px".

Odpowiedz

13

usuń px z ciągów znaków, należy dodać wartości, a następnie dodać px powrotem

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

to daje mi „4060px "w dzienniku konsoli Chrome. Jednak używając parseInt jak sugerują inne odpowiedzi otrzymuję "100px" z tej modyfikacji: '(parseInt (" 40px ".replace (/ px /," ")) + 60) +" px "' – joshuahedlund

+0

W porządku, mój błąd, powinien umieść numer z przodu, w przeciwnym razie doda ciągi znaków. parseInt sprawia, że ​​liczba jest poza ciągiem znaków, więc powinna również działać dobrze. –

4

Szukacie funkcji 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"; 

Warto również zapoznać się z metodą parseFloat(). Działa to tak samo, jak parseInt(), ale działa na liczbach z liczbami dziesiętnymi (również wartości zmiennoprzecinkowe).

0

Można to zrobić przez parsowania wartości css.left obiektu, nieco jak poniżej:

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

Ale należy pamiętać, że wartość css.left może nie być px, ale także %, em itd., Więc czystym sposobem byłoby użycie jQuery offset method, ponieważ dałoby to poprawną wartość pikseli.

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

parseFloat będzie analizować jedynie prefiks ciąg, który jest liczbą.

4

Prawdopodobnie najbardziej skutecznym sposobem jest

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

The 10 JEST W zaproszeniach parseInt są konieczne do ochrony przed wartością jest błędnie obliczony w czymś innym niż podstawy 10.

+0

Wygląda na to, że nie działa w Chrome, wydaje mi się, że otrzymuję NaN, dopóki nie zostanie usunięty komponent "px". – sradforth

+0

Myślę, że to jest lepsza odpowiedź, ponieważ pytanie ** 1: ** było: _two ** zmienne ** z wartościami "60px" i "40px" _, a przy zaakceptowanej odpowiedzi druga wartość nie jest zmienną, ** 2: ** 'parseInt' zamieni '40px' na 40, więc nie ma potrzeby' wymień (/ px/, "") '. Dodanie '+" px "' powinno przekonwertować Integer na String, tak samo jak robi to w zaakceptowanej odpowiedzi. To rozwiązanie działa tak, jak powinno, więc czy ktoś może wyjaśnić, dlaczego @wheresrhys otrzymywał NaN? – papo

Powiązane problemy