2012-01-05 12 views
5

Javascript öğelerinde birden fazla stil ayarlamak için en etkili yol hangisidir? o Hemen hemenSaf javascript kullanarak stili ayarlamanın en etkili yolu?

for (i=0;i<=lastSelector;i++) { 
var e = mySelector[i], 
v = 'opacity 1s'; 
e.style.WebkitTransition = v; 
e.style.MozTransition = v; 
e.style.OTransition = v; 
e.style.MsTransition = v; 
e.style.transition = v; 
e.style.opacity = 0; 
}; 
+3

', ben bir sınıf kullanmak ve sadece elemana sınıfını eklersiniz. –

+0

@FelixKling: +1 – fcalderan

+0

FelixKling, iyi nokta! Bu durumda CSS dosyalarını açamayacağım :) – Hakan

cevap

6

, bir yığılmış atama kullanabilirsiniz: Biz satıcıya özgü sürümleri bu özelliklerin birçoğuna olduğundan

for (i=0;i<=lastSelector;i++) { 
    var e = mySelector[i]; 
    e.style.WebkitTransition = 
    e.style.MozTransition = 
     e.style.OTransition = 
     e.style.MsTransition = 
      e.style.transition = 
      'opacity 1s'; 
    e.style.opacity = 0; 
} 

, bu yapan bir yeniden kullanılabilir işlev düşünebilirsiniz, örneğin:

function setMultiVendorProp(style, propName, value) { 
    // Set the non-vendor version 
    style[propName] = value; 

    // Make first char capped 
    propName = propName.substring(0, 1).toUpperCase() + propName.substring(1); 

    // Set vendor versions 
    style["Webkit" + propName] = value; 
    style["Moz" + propName] = value; 
    style["O" + propName] = value; 
    style["Ms" + propName] = value; 

    // Done 
    return value; 
} 

Ya biz zaten dizeleri yerine tanımlayıcıları kullandığınız beri yerine kesikli stilini kullanarak:

Sonra
function setMultiVendorProp(style, propName, value) { 
    // Set the non-vendor version 
    style[propName] = value; 

    // Set vendor versions 
    style["-webkit-" + propName] = value; 
    style["-moz-" + propName] = value; 
    style["-o-" + propName] = value; 
    style["-ms-" + propName] = value; 

    // Done 
    return value; 
} 

:

for (i=0;i<=lastSelector;i++) { 
    var e = mySelector[i]; 
    setMultiVendorProp(e.style, "transition", "opacity 1s"); 
    e.style.opacity = 0; 
} 

Yan notlar: Bir for açıklamada kapanış } sonra hiç ; var

  • . herhangi bir yerde işlev
  • var
  • fonksiyonu (hafifçe) kod okuyucusuna yanıltıcı içinde çok işlev olmayan blokları içinde var ilan fonksiyon geniştir; ayrıntıları: Poor, misunderstood var
+0

Zarif. Bence :) – willem

+0

Bu benim için yeni bir şeydi! – Hakan

+0

@Hakan: Yığılmış bir ödev? Evet, oldukça kullanışlı. 'B = c' ifadesinin bir değere sahip olması (ifadenin değeri 'c' değeridir), yani a = b = c ', ilk olarak b = c' ifadesinin bir sonucudur. değerlendirilir ve daha sonra 'a = (sonuç değeri)' değerlendirilir. Sağ taraftaki değerin sadece * bir kez * alındığını unutmayın, örneğin "a = b = func();" sadece 'func' ** bir kez ** çağırır ve dönüş değeri atandı. b ', sonra o atama ifadesinin değeri a'ya atanır. Ayrıntılar: [Spesifik bölüm 11.13.1] (http://es5.github.com/#x11.13.1). –

2

Bu deneyebilirsiniz: v = 'opacity 1s' Eğer döngü geçmesi her zaman ayarlamak gerek yoktur

var i, 
    es, 
    v = 'opacity 1s'; 
for (i=0;i<=lastSelector;i++) { 
    es = mySelector[i].style; 

    es.WebkitTransition = v; 
    es.MozTransition = v; 
    es.OTransition = v; 
    es.MsTransition = v; 
    es.transition = v; 
    es.opacity = 0; 
}; 

var, sadece döngü önce bir kez ayarlayın. Ve v bildirgesini taşıdığımız sürece, JS'nin yalnızca işlev kapsamı olduğuna dikkat edin, böylece bir döngüdeki değişkenleri bildirme aslında kapsamlarını bu döngüyle sınırlamaz. Belki bir işlevde

+0

Course nnnnnn, benim örneğimde bunu kaçırdı ... "i" ilan etmek gerekli mi? – Hakan

+1

Açıkça "var" ile bildirmediğiniz herhangi bir değişken, genel bir değişken olur. Bu, bulunması zor hatalara neden olabilir, örneğin, kendi döngüsünüzün içinde, ben de kullanılan bir işlev olarak adlandırılırsınız. – nnnnnn

0

:

function setStyles(styles, element, value) 
{ 
    for(var i=0,l=styles.length;i<l;i++) 
     { 
      if(p in element.style) 
       element.style[p] = value; 
     } 
    }; 
} 

Yani arayabilirsiniz: V` statik

var s = ['WebkitTransition','MozTransition','OTransition','MsTransition','transition']; 
for (i=0;i<=lastSelector;i++) { 
    var e = mySelector[i], 
    v = 'opacity 1s'; 
    setStyles(s,e,v); 
    e.style.opacity = 0; 
}; 
İlgili konular