JS getStyle獲取最終樣式函數(shù)代碼
更新時間:2010年04月01日 18:02:12 作者:
定義一個id="flower"的div元素 并設(shè)置如上樣式,我們的目標(biāo)就是通過javascript來獲取樣式的最終屬性
復(fù)制代碼 代碼如下:
#flower {
width:100px;
font-size:12px;
float:left;
opacity:0.5;
filter:alpha(opacity=50);
}
定義一個id="flower"的div元素 并設(shè)置如上樣式,我們的目標(biāo)就是通過javascript來獲取樣式的最終屬性
<div id="flower" >...</div>
getStyle函數(shù):
這里用到了三個原型擴(kuò)展
String.prototype.capitalize 這個方法是讓字符串首字母大寫
Array.prototype.contains 判斷數(shù)組中是否有指定成員
String.prototype.camelize 這個是讓"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)行時的樣式!如果與style的屬性重疊,將覆蓋style的屬性!
currentStyle 指 style 和 runtimeStyle 的結(jié)合!
style 內(nèi)聯(lián)的樣式
currentStyle 代表了在全局樣式表、內(nèi)嵌樣式和 HTML 標(biāo)簽屬性中指定的對象格式和樣式
runtimeStyle 代表了居于全局樣式表、內(nèi)嵌樣式和 HTML 標(biāo)簽屬性指定的格式和樣式之上的對象的格式和樣式
(FF中沒有currentStyle 和runtimeStyle)
getStyle(元素id,獲取屬性);
獲取元素style標(biāo)簽內(nèi)的樣式
elem.style[styles] || elem.style[styles.camelize()]
支持傳入"font-size"的寫法
但這并不是最終的樣式 .
獲取最終樣式 有兩終辦法 一個是
document.defaultView.getComputedStyle //w3c的方法
還有就是通過 elem.currentStyle["..."] //ie下的方法
currentStyle 方法 需要將帶"-"字符的屬性 需要通過String.prototype.camelize轉(zhuǎn)換成ie可識別的屬性
復(fù)制代碼 代碼如下:
if(value=="auto" && ["width","height"].contains(styles) && elem.style.display!="none"){
value=elem["offset"+styles.capitalize()]+"px";
}
當(dāng) css中定義 元素的寬度為 auto時,并不能獲取元素的最終寬度是多少,我們可以用 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)文章
moment.js使用方法總結(jié)(全網(wǎng)最全)
日常開發(fā)中通常會對時間進(jìn)行下面這幾個操作,比如獲取時間,設(shè)置時間,格式化時間,比較時間等等,下面這篇文章主要給大家介紹了關(guān)于moment.js使用方法的相關(guān)資料,需要的朋友可以參考下2024-03-03
基于JavaScript實(shí)現(xiàn)網(wǎng)頁版羊了個羊游戲
最近羊了個羊火的不得了,這篇文章主要為大家介紹了如何利用JS實(shí)現(xiàn)個網(wǎng)頁版羊了個羊游戲,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-09-09
JS對img標(biāo)簽進(jìn)行優(yōu)化使用onerror顯示默認(rèn)圖像
這篇文章主要介紹了JS對img標(biāo)簽進(jìn)行優(yōu)化使用onerror顯示默認(rèn)圖像,需要的朋友可以參考下2014-04-04
JS中隊(duì)列和雙端隊(duì)列實(shí)現(xiàn)及應(yīng)用詳解
這篇文章主要介紹了JS中隊(duì)列和雙端隊(duì)列實(shí)現(xiàn)及應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
javascript 構(gòu)造函數(shù)強(qiáng)制調(diào)用經(jīng)驗(yàn)總結(jié)
本文將介紹javascript構(gòu)造函數(shù)調(diào)用方面的案例應(yīng)用,需要了解的朋友可以參考下2012-12-12

