2012-01-05 11 views
5

जावास्क्रिप्ट में तत्वों पर एकाधिक स्टाइल सेट करने का सबसे प्रभावी तरीका क्या है?शुद्ध जावास्क्रिप्ट का उपयोग कर स्टाइल सेट करने का सबसे प्रभावी तरीका?

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

तो 'v' स्थिर है, मैं एक वर्ग का प्रयोग करेंगे और केवल तत्व को वर्ग जोड़ें। –

+0

@ फ़ेलिक्सक्लिंग: +1 – fcalderan

+0

फ़ेलिक्सक्लिंग, अच्छा बिंदु! इस मामले में मुझे सीएसएस फाइलों के लिए एसेस नहीं होगा :) – Hakan

उत्तर

6

सुंदर है कि, आप एक खड़ी काम इस्तेमाल कर सकते हैं:

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; 
} 

चूंकि इन गुणों जहाँ हम विक्रेता विशिष्ट संस्करण है के कई हैं, तो आप एक पुन: प्रयोज्य समारोह है कि यह करता है पर विचार हो सकता, उदाहरण के लिए:

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; 
} 

या, बजाय धराशायी शैली का उपयोग के बाद से हम पहले से ही पहचानकर्ता के बजाय तार का उपयोग कर रहे:

012,
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; 
} 

साइड नोट्स:

  • वहाँ एक for बयान में समापन } के बाद कोई ; है।
  • var किसी फ़ंक्शन में कहीं भी फ़ंक्शन-व्यापी है, इसलिए फ़ंक्शन के अंदर गैर-फ़ंक्शन ब्लॉक के भीतर var घोषित करना (थोड़ा) कोड के पाठक को भ्रामक है; विवरण: Poor, misunderstood var
+0

सुरुचिपूर्ण। मुझे लगता है :) – willem

+0

यह मेरे लिए कुछ नया था! – Hakan

+0

@ हकन: एक स्टैक्ड असाइनमेंट? हाँ, यह बहुत उपयोगी है। यह इस तथ्य का एक परिणाम है कि अभिव्यक्ति 'बी = सी' का मान है (अभिव्यक्ति का मान 'c' का मान है), इसलिए 'ए = बी = सी' में, पहले 'बी = सी' अभिव्यक्ति' मूल्यांकन किया जाता है, और फिर 'ए = (परिणाम का मूल्य)' मूल्यांकन किया जाता है। ध्यान दें कि दूर दाएं हाथ का मूल्य केवल एक बार * लिया जाता है, इसलिए उदाहरण के लिए 'ए = बी = func();' केवल एक बार ** func' ** ** कहता है, और इसका वापसी मान ' बी', तो उस असाइनमेंट अभिव्यक्ति का मान 'a' को असाइन किया गया है। विवरण: [स्पेक सेक्शन 11.13.1] (http://es5.github.com/#x11.13.1)। –

2

आप इस कोशिश कर सकते:

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; 
}; 

v = 'opacity 1s' आप पाश के माध्यम से जाना हर समय निर्धारित करने की कोई ज़रूरत नहीं है, बस पाश से पहले एक बार यह निर्धारित किया है। और जब तक हम v की घोषणा को आगे बढ़ा रहे हैं, ध्यान दें कि जेएस के पास केवल कार्यक्षेत्र है, इसलिए लूप में चर घोषित करने से वास्तव में उस लूप पर उनके दायरे को सीमित नहीं किया जाता है।

+0

कोर्स ऑफ एनएनएनएनएन, मेरे उदाहरण में याद किया ... क्या "i" घोषित करना आवश्यक है? – Hakan

+1

कोई वैरिएबल जिसे आप स्पष्ट रूप से 'var' के साथ घोषित नहीं करते हैं, वह वैश्विक चर बन जाएगा। इससे हार्ड-टू-बग बग का कारण बन सकता है, उदाहरण के लिए, यदि आपके लूप के अंदर आप एक फ़ंक्शन कहलाते हैं जो 'i' भी उपयोग करता है। – 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; 
     } 
    }; 
} 

तो तुम फोन कर सकते हैं:

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; 
}; 
संबंधित मुद्दे