2016-04-14 10 views
0

'% 20' olarak ayarlanmış bir yarıçapım var. Benim kodunda, ben gibi iki kez yarı çapına bir yüksekliğe ayarlamak istediğiniz -CSS birim matematiğini javascript'te nasıl yapıyorsunuz ve CSS ünitesini koruyorsunuz?

height = radius * 2; 

ve bunu yarıçapı '20% olduğu 'veya '20px' veya '20em', ya da' 20vw olmadığını çalışmak istiyorum 've sonuç '40%' veya '40px' veya '40em' veya '40vw' olur.

(I Reactjs kullanarak ve Radyum erişebilir am)

+2

Sayıları birimlerden ayırın, matematik yapın ve daha sonra orijinal birimleri tekrar sonuçta birleştirin. – Pointy

+0

@Pointy bu benim geri dönüş çözümüm. Daha zarif bir yol olduğunu umuyordum. – brendangibson

+0

veya bir önişlemci ve ilgili yükleyici –

cevap

0

Sen parseFloat ile sayı ve dize kalanını olan birimler dışarı ayrıştırmak:

var value = "123px"; 

var n = parseFloat(value); 
var u = value.trim().substring(n.toString().length); 

console.log("number:", n, "units:", u, "value:", n + u); 
// Output: number: 123 units: px value: 123px 

Yoksa bile yaparım regex (teşekkürler yorumlarda brendangibson):

var value = "123px"; 
var matched = value.match(/(\d+)([^\d]*)$/); 
var num = matched[1], unit = matched[2]; 

Ve yapı bozma dizi atama ile:

let [all, num, unit] = value.match(/(\d+)([^\d]*)$/); 

Ya da sizin için bir çok JS libraries'dan birini kullanabilirsiniz.

+0

Denemeyi deneyin = "123px" '. Bir sayıya ve daha sonra bir dizeye dönüştürme bir kimlik işlevi değildir, boşluk kaybolur. Ve sonra 'substring' yanlış pozisyonda başlar. – Oriol

+0

@Oriol Doğru, bunu önlemek için gereklidir, ancak bunun gibi öncü boşluklara sahip olmak oldukça sıradışı olurdu ... 'style.left = "123px" 'ayarladığınızda bile geri aldığınız ayrıştırılmış değerdir" 123px "'. – Aaron

+0

'const [hepsi, değer, birim] = length.toString(). Match (/ (\ d +) ([^ \ d] *) $ /);' – brendangibson