2011-03-10 10 views
6

अगर मैं इस HTMLकिसी भी HTML तत्व में अल्फा फ़िल्टर कैसे जोड़ें और अन्य फ़िल्टर IE में रखें?

<img src="aaa.png" id="a" style="filter: alpha(opacity=100)"/> 

तो है इस जावास्क्रिप्ट IE6

document.getElementById("a").filters.alpha.opacity = 60; 

में काम करता है लेकिन कोई शैली सेट है, तो

<img src="aaa.png" id="a" style=""/> 

जावास्क्रिप्ट एक त्रुटि 'filters.alpha फेंकता 'शून्य है या कोई ऑब्जेक्ट नहीं है

इस कोड काम करता है

document.getElementById("a").style.filter = "alpha(opacity=60)"; 

लेकिन तब छवि के लिए लागू अन्य फ़िल्टर ओवरराइट कर रहे हैं। तो सवाल यह है: किसी भी HTML तत्व में अल्फा फ़िल्टर कैसे जोड़ें और अन्य फ़िल्टर IE में रखें?

संपादित मैं शुद्ध जावास्क्रिप्ट (नहीं jQuery) समाधान

उत्तर

8

दुर्भाग्य से, मुझे लगता है कि आप केवल filters साथ, style.filter संपत्ति के माध्यम से नए तत्व जोड़ सकते हैं आप केवल कर सकते हैं पहले से ही मौजूदा लोगों का उपयोग करें।

filter एक संग्रह वस्तु है, आप यहां दस्तावेज़ देख सकते हैं: filters Collection। यह आपको मौजूदा फ़िल्टर के साथ खेलने का एक अच्छा और आसान तरीका प्रदान करता है, आप उन्हें चालू और बंद कर सकते हैं (enabled) आदि।

उदाहरण के लिए, आप

obj.filters.item("DXImageTransform.Microsoft.Alpha").opacity=20; 

या (यदि अल्फा आप था पहले फिल्टर घोषणा)

obj.filters.item(0).opacity=20; 

कक्षाओं

अधिकांश समय उपयोग कर सकते हैं तो आप बेहतर बंद कर रहे हैं अपने सीएसएस में कुछ कक्षाओं के तहत अपनी फ़िल्टर घोषणाओं को संग्रहीत करना, और केवलमें हेरफेर करने के बजाए सही कक्षाएं असाइन करने के लिए जेएस का उपयोग करनामूल्य सीधे।

+0

नहीं। यदि आपके द्वारा सुझाए गए कोड में अपवाद फेंकता है तो अल्फा फ़िल्टर सेट नहीं किया गया था और कुछ नहीं होता (कम से कम मेरे आई 6 परीक्षण में)। आप style.filter + = ... का उपयोग कर सकते हैं - लेकिन इस मामले में तार अधिक से अधिक बढ़ता है। –

+0

ओह गलत समझा ... मैंने अभी मौजूदा फ़िल्टर तक पहुंचने का एक अच्छा तरीका दिया है, लेकिन मैंने यह भी जोर दिया कि फ़िल्टर के साथ आप नए जोड़ नहीं सकते हैं। – kapa

+0

मुझे इसे थोड़ा सा दोबारा दोहराएं ... – kapa

2

आप फिल्टर आप चाहते हैं की n नंबर दे सकते हैं, लेकिन सिर्फ उन्हें अन्य एक जगह से अलग कर दिया के बाद एक जोड़कर रखना चाहते हैं। उदाहरण के लिए,

STYLE="filter:progid:DXImageTransform.Microsoft.MotionBlur(strength=50) 
     progid:DXImageTransform.Microsoft.Alpha(opacity=60);" 

चेक अधिक के लिए इस लिंक: http://msdn.microsoft.com/en-us/library/ms532847%28v=vs.85%29.aspx

मुझे आशा है कि आपके सवाल का जवाब।

+0

हां, यह उपयोगी है। लेकिन जावास्क्रिप्ट द्वारा फ़िल्टर कैसे जोड़ें? –

4

कुछ और परीक्षण के बाद, मैं इस समाधान

var filter = function(obj,f,params) { 
    var found, nf, dx = "DXImageTransform.Microsoft."; 

    // check if DXImageTransform.Microsoft.[Filter] or [Filter] filter is set 
    try { nf = obj.filters.item(dx+f); found = true; } catch(e) {} 
    if(!found) try { nf = obj.filters.item(f); found = true; } catch(e) {} 

    // filter is set - change existing one 
    if(found) { 
    nf.Enabled = true; // if exists, it might be disabled 
    if(params) for(var i in params) nf[i] = params[i]; 
    } 

    // filter is not set - apply new one 
    else { 
    nf = ""; 
    if(params) for(var i in params) nf+= i.toLowerCase()+"="+params[i]+","; 
    if(params) nf = "("+nf.substr(0,nf.length-1)+")"; 
    obj.style.filter+= "progid:"+dx+f+nf+" "; 
    } 

    // hasLayout property hack 
    if(!obj.style.zoom) obj.style.zoom = 1; 
}; 

उदाहरण

var obj = document.getElementById("a"); 
if(document.body.filters) filter(obj,"Alpha",{Opacity:50}); 

मुझे आशा है कि यह काम करता है, अगर किसी को भी एक समस्या पाता है, कृपया मुझे बताओ साथ आते हैं।

सूत्रों का कहना है

obj.filters संपत्ति http://msdn.microsoft.com/en-us/library/ms537452(VS.85).aspx

filter.Alpha http://msdn.microsoft.com/en-us/library/ms532967(VS.85).aspx

+0

अच्छा कोडिंग नियम। मैंने लगभग सोचा था कि आपका कोड नमूना obfuscated है! – StefanNch

संबंधित मुद्दे