JS getStyle獲取最終樣式函數(shù)代碼
更新時(shí)間:2010年04月01日 18:02:12 作者:
定義一個(gè)id="flower"的div元素 并設(shè)置如上樣式,我們的目標(biāo)就是通過javascript來獲取樣式的最終屬性
復(fù)制代碼 代碼如下:
#flower {
width:100px;
font-size:12px;
float:left;
opacity:0.5;
filter:alpha(opacity=50);
}
定義一個(gè)id="flower"的div元素 并設(shè)置如上樣式,我們的目標(biāo)就是通過javascript來獲取樣式的最終屬性
<div id="flower" >...</div>
getStyle函數(shù):
這里用到了三個(gè)原型擴(kuò)展
String.prototype.capitalize 這個(gè)方法是讓字符串首字母大寫
Array.prototype.contains 判斷數(shù)組中是否有指定成員
String.prototype.camelize 這個(gè)是讓"font-size" 字符串轉(zhuǎn)換成 "fontSize" 這樣的格式用來獲取樣式
復(fù)制代碼 代碼如下:
String.prototype.capitalize=function(){
return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
}
Array.prototype.contains=function(A){
return (this.indexOf(A) >= 0);
}
String.prototype.camelize=function(){
return this.replace(/\-(\w)/ig,
function(B, A) {
return A.toUpperCase();
});
}
var css={
getStyle:function(elem,styles){
var value,
elem=document.getElementById(elem);
if(styles == "float"){
document.defaultView ? styles = 'float' /*cssFloat*/ : styles='styleFloat';
}
value=elem.style[styles] || elem.style[styles.camelize()];
if(!value){
if (document.defaultView && document.defaultView.getComputedStyle) {
var _css=document.defaultView.getComputedStyle(elem, null);
value= _css ? _css.getPropertyValue(styles) : null;
}else{
if (elem.currentStyle){
value = elem.currentStyle[styles.camelize()];
}
}
}
if(value=="auto" && ["width","height"].contains(styles) && elem.style.display!="none"){
value=elem["offset"+styles.capitalize()]+"px";
}
if(styles == "opacity"){
try {
value = elem.filters['DXImageTransform.Microsoft.Alpha'].opacity;
value =value/100;
}catch(e) {
try {
value = elem.filters('alpha').opacity;
} catch(err){}
}
}
return value=="auto" ? null :value;
}
}
css.getStyle("flower","width"); //100px;
css.getStyle("flower","font-size");//12px;
css.getStyle("flower","float");//left
css.getStyle("flower","opacity");//0.5
先回顧下基礎(chǔ)
style 標(biāo)準(zhǔn)的樣式!可能是由style屬性指定的!
runtimeStyle 運(yùn)行時(shí)的樣式!如果與style的屬性重疊,將覆蓋style的屬性!
currentStyle 指 style 和 runtimeStyle 的結(jié)合!
style 內(nèi)聯(lián)的樣式
currentStyle 代表了在全局樣式表、內(nèi)嵌樣式和 HTML 標(biāo)簽屬性中指定的對(duì)象格式和樣式
runtimeStyle 代表了居于全局樣式表、內(nèi)嵌樣式和 HTML 標(biāo)簽屬性指定的格式和樣式之上的對(duì)象的格式和樣式
(FF中沒有currentStyle 和runtimeStyle)
getStyle(元素id,獲取屬性);
獲取元素style標(biāo)簽內(nèi)的樣式
elem.style[styles] || elem.style[styles.camelize()]
支持傳入"font-size"的寫法
但這并不是最終的樣式 .
獲取最終樣式 有兩終辦法 一個(gè)是
document.defaultView.getComputedStyle //w3c的方法
還有就是通過 elem.currentStyle["..."] //ie下的方法
currentStyle 方法 需要將帶"-"字符的屬性 需要通過String.prototype.camelize轉(zhuǎn)換成ie可識(shí)別的屬性
復(fù)制代碼 代碼如下:
if(value=="auto" && ["width","height"].contains(styles) && elem.style.display!="none"){
value=elem["offset"+styles.capitalize()]+"px";
}
當(dāng) css中定義 元素的寬度為 auto時(shí),并不能獲取元素的最終寬度是多少,我們可以用 offsetWidth 和 offsetHeight 獲取實(shí)際值
當(dāng)然前提是要在元素為"可見"的狀態(tài)下!
復(fù)制代碼 代碼如下:
try {
value = elem.filters['DXImageTransform.Microsoft.Alpha'].opacity;
value =value/100;
}catch(e) {
try {
value = elem.filters('alpha').opacity;
} catch(err){}
}
這是獲取透明度的方法,ie中定義透明度和其他瀏覽器不同.需把通過濾鏡得到的opacity值/100。返回標(biāo)準(zhǔn)的opacity值(范圍0-1);
相關(guān)文章
HTML中使背景圖片自適應(yīng)瀏覽器大小實(shí)例詳解
這篇文章主要介紹了HTML中使背景圖片自適應(yīng)瀏覽器大小實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04
javascript Array對(duì)象使用小結(jié)
數(shù)組是一段線性分配的內(nèi)存,它通過整數(shù)去計(jì)算偏移并訪問其中的元素。數(shù)組是很快的數(shù)據(jù)結(jié)構(gòu),但不幸的是,Javascript并沒有像這種數(shù)組一樣的數(shù)據(jù)結(jié)構(gòu)。2009-12-12
JavaScript實(shí)現(xiàn)電燈開關(guān)小案例
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)電燈開關(guān)小案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
如何防止JavaScript自動(dòng)插入分號(hào)
JavaScript語(yǔ)言有一個(gè)機(jī)制:在解析時(shí),能夠在一句話后面自動(dòng)插入一個(gè)分號(hào),用來修改語(yǔ)句末尾遺漏的分號(hào)分隔符。然而,由于這個(gè)自動(dòng)插入的分號(hào)與JavaScript語(yǔ)言的另一個(gè)機(jī)制發(fā)生了沖突,即所有空格符都被忽略,因此程序可以利用空格格式化代碼2015-11-11
一分鐘學(xué)會(huì)JavaScript中的try-catch
這篇文章主要給大家介紹了關(guān)于如何通過一分鐘學(xué)會(huì)JavaScript中try-catch的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Javascript Function對(duì)象擴(kuò)展之延時(shí)執(zhí)行函數(shù)
這篇文章主要介紹 在js里面怎么延時(shí)執(zhí)行一個(gè)函數(shù)?2010-07-07
JS實(shí)現(xiàn)簡(jiǎn)單的浮動(dòng)碰撞效果示例
這篇文章主要介紹了JS實(shí)現(xiàn)簡(jiǎn)單的浮動(dòng)碰撞效果,類似于廣告懸浮圖片在屏幕上來回碰撞的效果,涉及javascript結(jié)合時(shí)間動(dòng)態(tài)操作頁(yè)面元素屬性的相關(guān)技巧,需要的朋友可以參考下2017-12-12

