成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 解析原生JS getComputedStyle

解析原生JS getComputedStyle

熱門標簽:山東電銷機器人軟件 廣州防封電銷機器人廠家 智能語音電銷機器人客戶端 南通電銷外呼系統(tǒng)軟件 常州電話外呼系統(tǒng)招商 成都企業(yè)外呼系統(tǒng) 申請400電話移動 洛陽防封卡外呼系統(tǒng)廠家 上海400電話辦理到易號網

getComputedStyle 與getPropertyValue

getComputedStyle 為何物呢,DOM 中 getComputedStyle 方法可用來獲取元素中所有可用的css屬性列表,以數組形式返回,并且是只讀的。IE678 中則用 currentStyle 代替 。

假設我們頁面上存在一個 id 為 id 的元素,那么使用getComputedStyle 獲取元素樣式就如下圖所示:

嘗試一下之后可以看到,window.getComputedStyle 獲取的是所有的樣式,如果我們只是要獲取單一樣式,該怎么做呢。這個時候就要介紹另一個方法 --getPropertyValue。

用法也很簡單:

// 語法:
// 使用 getPropertyValue 來指定獲取的屬性
window.getComputedStyle("元素", "偽類").getPropertyValue(style);

IE 下的 currentStyle與getAttribute

說完常規(guī)瀏覽器,再來談談老朋友 IE ,與getComputedStyle 對應,在 IE 中有自己特有的 currentStyle屬性,與 getPropertyValue 對應,IE 中使用getAttribute 。

和 getComputedStyle 方法不同的是,currentStyle 要獲得屬性名的話必須采用駝峰式的寫法。也就是如果我需要獲取 font-size 屬性,那么傳入的參數應該是 fontSize。因此在IE 中要獲得單個屬性的值,就必須將屬性名轉為駝峰形式。

// IE 下語法:
// IE 下將 CSS 命名轉換為駝峰表示法
// font-size --> fontSize
// 利用正則處理一下就可以了
function camelize(attr) {
    // /\-(\w)/g 正則內的 (\w) 是一個捕獲,捕獲的內容對應后面 function 的 letter
    // 意思是將 匹配到的 -x 結構的 x 轉換為大寫的 X (x 這里代表任意字母)
    return attr.replace(/\-(\w)/g, function(all, letter) {
        return letter.toUpperCase();
    });
}
// 使用 currentStyle.getAttribute 獲取元素 element 的 style 屬性樣式
element.currentStyle.getAttribute(camelize(style));

style 與getComputedStyle

必須要提出的是,我們使用element.style 也可以獲取元素的CSS樣式聲明對象,但是其與getComputedStyle方法還是有一些差異的。

首先,element.style 是可讀可寫的,而getComputedStyle 為只讀。

其次,element.style 只可以獲取 style 樣式上的屬性值,而無法得到所有的 CSS 樣式值,什么意思呢?回顧一下 CSS 基礎,CSS 樣式表的表現有三種方式,

1.內嵌樣式(inline Style) :是寫在 HTML 標簽里面的,內嵌樣式只對該標簽有效。

2.內部樣式(internal Style Sheet):是寫在 HTML 的 style> 標簽里面的,內部樣式只對所在的網頁有效。

3.外部樣式表(External Style Sheet):如果很多網頁需要用到同樣的樣式(Styles),將樣式(Styles)寫在一個以 .CSS為后綴的 CSS 文件里,然后在每個需要用到這些樣式(Styles)的網頁里引用這個 CSS 文件。

而element.style 只能獲取被這些樣式表定義了的樣式,而 getComputedStyle 能獲取到所有樣式的值(在不同瀏覽器結果不一樣,chrome 中是 264,在 Firefox 中是238),不管是否定義在樣式表中,譬如:

style>
#id{
    width : 100px;
    float:left;
}
/style>
 
var elem = document.getElementById('id');
 
elem.style.length // 2
window.getComputedStyle(elem, null).length // 264

getComputedStyle 與defaultView

window.getComputedStyle 還有另一種寫法,就是 document.defaultView.getComputedStyle 。

兩者的用法完全一樣,在 jQuery v1.10.2 中,使用的就是window.getComputedStyle 。如下

也有特例,查看stackoverflow,上面提及到在Firefox 3.6 ,不使用document.defaultView.getComputedStyle 會出錯。不過畢竟 FF3.6 已經隨歷史遠去,現在可以放心的使用window.getComputedStyle。

用一張圖總結一下:

原生JS實現CSS樣式的get與set

說了這么多,接下來將用原生 JS 實現一個小組件,實現 CSS 的 get 與 set,兼容所有瀏覽器。

getStyle(elem, style)

對于 CSS 的 set ,對于支持window.getComputedStyle 的瀏覽器而言十分簡單,只需要直接調用。

getStyle: function(elem, style) {
    // 主流瀏覽器
    if (win.getComputedStyle) {
        return win.getComputedStyle(elem, null).getPropertyValue(style);
    }
}

反之,如果是 IE 瀏覽器,則有一些坑。

opacity 透明度的設定

在早期的 IE 中要設置透明度的話,有兩個方法:

1.alpha(opacity=0.5)

2.filter:progid:DXImageTransform.Microsoft.gradient( GradientType= 0 , startColorstr = ‘#ccccc',endColorstr = ‘#ddddd' );

因此在 IE 環(huán)境下,我們需要針對透明度做一些處理。先寫一個 IE 下獲取透明度的方法:

// IE 下獲取透明度   
function getIEOpacity(elem) {
    var filter = null;
 
    // 早期的 IE 中要設置透明度有兩個方法:
    // 1、alpha(opacity=0)
    // 2、filter:progid:DXImageTransform.Microsoft.gradient( GradientType= 0 , startColorstr = ‘#ccccc', endColorstr = ‘#ddddd' );
    // 利用正則匹配
    filter = elem.style.filter.match(/progid:DXImageTransform.Microsoft.Alpha\(.?opacity=(.*).?\)/i) || elem.style.filter.match(/alpha\(opacity=(.*)\)/i);
 
    if (filter) {
        var value = parseFloat(filter);
        if (!isNaN(value)) {
            // 轉化為標準結果
            return value ? value / 100 : 0;
        }
    }
    // 透明度的值默認返回 1
    return 1;

float 樣式的獲取

float 屬性是比較重要的一個屬性,但是由于 float 是ECMAScript的一個保留字。

所以在各瀏覽器中都會有代替的寫法,比如說在標準瀏覽器中為 cssFloat,而在 IE678 中為 styleFloat 。經測試,在標準瀏覽器中直接使用getPropertyValue("float") 也可以獲取到 float 的值。而 IE678 則不行,所以針對 float ,也需要一個 HACK。

width | height 樣式的獲取

然后是元素的高寬,對于一個沒有設定高寬的元素而言,在 IE678 下使用getPropertyValue("width|height") 得到的是 auto 。而標準瀏覽器會直接返回它的 px 值,當然我們希望在 IE 下也返回 px 值。

這里的 HACK 方法是使用 element.getBoundingClientRect() 方法。

element.getBoundingClientRect() --可以獲得元素四個點相對于文檔視圖左上角的值 top、left、bottom、right ,通過計算就可以容易地獲得準確的元素大小。

獲取樣式的駝峰表示法

上文已經提及了,在IE下使用currentStyle 要獲得屬性名的話必須采用駝峰式的寫法。

OK,需要 HACK 的點已經提完了。那么在 IE 下,獲取樣式的寫法:

getStyle: function(elem, style) {
    // 主流瀏覽器
    if (win.getComputedStyle) {
        ...
    // 不支持 getComputedStyle
    } else {
        // IE 下獲取透明度
        if (style == "opacity") {
            getIEOpacity(elem);
        // IE687 下獲取浮動使用 styleFloat
        } else if (style == "float") {
            return elem.currentStyle.getAttribute("styleFloat");
                // 取高寬使用 getBoundingClientRect
        } else if ((style == "width" || style == "height")  (elem.currentStyle[style] == "auto")) {
            var clientRect = elem.getBoundingClientRect();
 
            return (style == "width" ? clientRect.right - clientRect.left : clientRect.bottom - clientRect.top) + "px";
        }
        // 其他樣式,無需特殊處理
        return elem.currentStyle.getAttribute(camelize(style));
    }
}

setStyle(elem, style, value)

說完 get ,再說說 setStyle ,相較于getStyle ,setStyle 則便捷很多,因為不管是標準瀏覽器還是 IE ,都可以使用element.style.cssText 對元素進行樣式的設置。

cssText -- 一種設置 CSS 樣式的方法,但是它是一個銷毀原樣式并重建的過程,這種銷毀和重建,會增加瀏覽器的開銷。而且在 IE 中,如果cssText(假如不為空),最后一個分號會被刪掉,所以我們需要在其中添加的屬性前加上一個 ”;” 。

只是在 IE 下的 opacity 需要額外的進行處理。明了易懂,直接貼代碼:

// 設置樣式
setStyle: function(elem, style, value) {
    // 如果是設置 opacity ,需要特殊處理
    if (style == "opacity") {
        //IE7 bug:filter 濾鏡要求 hasLayout=true 方可執(zhí)行(否則沒有效果)
        if (!elem.currentStyle || !elem.currentStyle.hasLayout) {
            // 設置 hasLayout=true 的一種方法
            elem.style.zoom = 1;
        }
        // IE678 設置透明度叫 filter ,不是 opacity
        style = "filter";
 
        // !!轉換為 boolean 類型進行判斷
        if (!!window.XDomainRequest) {
            value = "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=" + value * 100 + ")";
        } else {
            value = "alpha(opacity=" + value * 100 + ")"
        }
    }
    // 通用方法
    elem.style.cssText += ';' + (style + ":" + value);
}

到這里,原生 JS 實現的 getStyle 與setStyle 就實現了??梢钥吹?,一個簡單接口的背后,都是有涉及了很多方面東西。雖然瀏覽器兼容性是一個坑,但是爬坑的過程卻是我們沉淀自己的最好時機。

jQuery 這樣的框架可以幫助我們走的更快,但是毫無疑問,去弄清底層實現,掌握原生 JS 的寫法,可以讓我們走得更遠。

以上就是解析原生JS getComputedStyle的詳細內容,更多關于原生JS getComputedStyle的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • 前端學習筆記style,currentStyle,getComputedStyle的用法與區(qū)別
  • JS獲取CSS樣式(style/getComputedStyle/currentStyle)
  • JS使用getComputedStyle()方法獲取CSS屬性值
  • getComputedStyle與currentStyle獲取樣式(style/class)
  • javascript 讀取內聯(lián)之外的樣式(style、currentStyle、getComputedStyle區(qū)別介紹)
  • 用javascript getComputedStyle獲取和設置style的原理

標簽:滄州 萊蕪 混顯 邵陽 賀州 貴州 鶴壁 廣安

巨人網絡通訊聲明:本文標題《解析原生JS getComputedStyle》,本文關鍵詞  解析,原生,getComputedStyle,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《解析原生JS getComputedStyle》相關的同類信息!
  • 本頁收集關于解析原生JS getComputedStyle的相關信息資訊供網民參考!
  • 推薦文章
    99精品中文字幕| 国产婷婷97碰碰久久人人蜜臀| 91文字幕巨乱亚洲香蕉| 成人有码在线视频| 亚洲综合色站| 欧美二区三区91| 污的视频网站| 免费看男女www网站入口在线| 成人ww免费完整版在线观看| 免费黄在线观看| 久久久国产精品午夜一区ai换脸| 日韩专区av| 一区二区视频国产| 日韩视频在线观看一区二区| 亚洲欧洲二区| 一区二区三区91| 亚洲在线播放电影| 久草在线视频网| 国产精品www在线观看| av亚洲免费| 国产制服91一区二区三区制服| 国产乱人伦偷精品视频免下载| 国产日产欧美一区二区| 嫩草国产精品入口| 欧美不卡在线视频| 成人高清免费| 日本不卡一区视频| 一级日本不卡的影视| 欧美视频网址| 国产精品网站大全| 粉嫩av一区二区三区免费野| 7m精品国产导航在线| 18禁一区二区三区| 久久九九有精品国产23| 4kfree性满足欧美hd18| 国产女人爽到高潮a毛片| 日本在线不卡视频一二三区| 久久久久久久久久国产精品| 国产视频久久久| 97精品中文字幕| 日日摸日日碰夜夜爽av| 一本色道久久亚洲综合精品蜜桃| 日本a级c片免费看三区| 日韩精品免费| 成人免费va视频| 伊人久久综合一区二区| 日本一区二区在线免费播放| 制服丝袜在线一区| 亚洲福利一二三区| 亚洲欧美中文日韩在线v日本| 国产日韩欧美二区| 国产suv精品一区二区四区视频| 亚洲网址在线| 九九九视频在线观看| 一区二区三区天堂av| 亚洲精品国产系列| 国产区二精品视| 国产口爆吞精一区二区| 亚洲1区在线| 国产成人免费9x9x人网站视频| 亚洲国内高清视频| 国产成人自拍在线| 99re91这里只有精品| 美女视频网站在线观看| 亚洲一区亚洲| 中文字字幕在线中文乱码| 女人裸体免费网站| 日韩综合一区| 国产精品激情偷乱一区二区∴| 制服丝袜在线一区| 一个人免费观看在线视频www| 伊人成色综合网| 亚洲一级av无码毛片精品| 久久婷婷一区| 色一情一乱一乱一区91av| 日韩中文字幕免费看| 日韩国产精品大片| 免费视频观看成人| 亚洲片在线观看| 99精产国品一二三产品香蕉| 久久久精品国产99久久精品芒果| 国产精品久久久久一区二区国产| 国产在线一在线二| 日日悠悠久久| 黄大色黄女片18免费| 日韩精品久久久久久| 色七七影院综合| 午夜精品久久久久久久爽| 日本欧美国产| 五十路亲子中出在线观看| 久久久久久久久99| 亚洲日韩中文字幕在线播放| 国产伦精品一区二区三毛| 顶级嫩模一区二区三区| 成年网站免费视频黄| 国产91久久久久蜜臀青青天草二| 中文字幕一区二区三区四区五区人| 超级砰砰砰97免费观看最新一期| 国产精品久久久一区二区| 国产一区二区日韩| 亚洲成a人片在线观看中文| 亚洲欧美激情一区| 国产精品a级| 中文字幕不卡的av| 欧美一级久久久久久久久大| 国产视频高清免费| 欧美在线播放一区二区| 草草影院第一页| 色综合天天性综合| 羞羞视频网站在线观看| 亚洲影院天堂中文av色| 欧美jizzhd欧美精品巨大| 私密视频在线观看| 亚洲第一男人av| 老熟妻内射精品一区| 久久久91精品国产一区不卡| 天天操天天操天天| 国产成人女人毛片视频在线| 1024国产在线| 欧产日产国产精品视频| 亚洲视频在线观看不卡| 免费h精品视频在线播放| 一区二区福利| 日韩av在线综合| 国产成人免费观看视频| 日韩在线观看你懂的| 亚洲精品国自产拍在线观看| 亚洲精品一线二线三线无人区| 国产一精品一aⅴ一免费| 99精品福利视频| 在线永久免费观看黄网站| 欧美成年人网站| 欧美xxxx少妇| 快she精品国产999| 亚洲欧美一区二区精品久久久| 欧美日韩久久| 国产午夜精品一区二区理论影院| 国产草草影院ccyycom| 欧美性猛交p30| 欧美xxxxxxxx| 日韩深夜福利网站| 中文字幕在线播放一区二区| 黄色国产网站在线观看| 成人激情黄色小说| 性欧美激情精品| 美国av一区二区三区| 欧美成人性色生活仑片| 色七七影院综合| 九九综合九九| 偷拍自拍亚洲色图| 日韩免费视频一区二区视频在线观看| 久久久97精品| 最新精品视频| 久久香蕉国产线看观看av| av在线免费观看国产| 国产精品色婷婷视频| 日韩亚洲第一页| 成人免费在线视频网站| 国产资源在线观看| 日韩欧美一区二区在线视频| 精品无码人妻一区| 国产另类xxxxhd高清| 免费黄色在线观看| 亚洲国产aⅴ精品| 日韩欧美三级在线| 国产另类ts人妖一区二区| 韩国女主播一区二区三区| 精品国产电影一区| 同房视频网站| 欧美日韩一级在线| 欧美成人精品三级在线观看| 偷窥少妇高潮呻吟av久久免费| 成人看片视频| 成人在线电影在线观看视频| 国产精品国色综合久久| 亚洲国产精品成人久久蜜臀| a视频在线免费看| 久久免费国产| 午夜老司机精品| 性欧美1819sex性高清| 国产美女免费观看| 日韩欧美精品在线不卡| 黄色一级免费| 亚洲国产wwwccc36天堂| 一本大道av伊人久久综合| 亚洲AV无码精品色毛片浪潮| 美女把尿口扒开让男人桶在线观看| 欧美美女bb生活片| 日韩精品 欧美| 五月天电影免费在线观看一区| 怡红院视频网站| 成年视频在线观看| 国产精品美女高潮无套| 国产视频二区三区| 无码免费一区二区三区免费播放| 欧美视频精品在线| 黄色小网站在线观看| 91精品产国品一二三产区| 欧美高清一级片在线观看| 久久精品国产69国产精品亚洲| 久久99久久久久| 国产精品久久久久影视| 国产盗摄精品一区二区三区在线| 国内外成人免费在线视频| 美女被羞羞网站| 中文字幕 久热精品 视频在线| 亚洲欧美国内爽妇网| 51久久夜色精品国产麻豆| h视频网站在线观看| 欧美精品在线播放| 蜜桃视频成人在线观看| 5566中文字幕一区二区| 午夜在线免费观看视频| 天堂一区二区三区四区| 国产成人一区二区三区免费看| 大胆高清日本a视频| 免费精品一区二区三区在线观看| 青花影视在线观看免费高清| 国产精品玖玖玖在线资源| 蜜臀91精品一区二区三区| 制服丝袜在线播放| 国产精品15p| 欧美精品18videos性欧| 国产精品成人国产乱| 精品1区2区3区| 在线视频你懂得一区二区三区| 亚洲第一福利专区| 91丝袜脚交足在线播放| 欧美一区二区三区精品| 四虎成人精品在永久在线观看| 国产三级精品三级在线观看国产| 亚洲香蕉在线视频| 欧美视频久久| 法国空姐电影在线观看| 国产丝袜视频在线观看| 91久久久免费一区二区| 四虎精品一区二区永久在线观看| 久久久无码中文字幕久...| 国产欧美日韩精品丝袜高跟鞋| 日韩免费看片| 欧美v国产在线一区二区三区| 亚洲午夜激情影院| www 四虎| 天天操天天色综合| 视频一区二区综合| 91精品国产综合久久久久久漫画| 国产午夜精品视频一区二区三区| 最新一本之道波多野结衣| 亚洲精品免费在线看| 久久国产精品第一页| av网站在线免费观看| 成人激情春色网| 亚洲人人夜夜澡人人爽| 性亚洲最疯狂xxxx高清| 性欧美18~19sex高清播放| 亚洲色图图片专区| 欧美色图免费看| 4虎在线播放1区| 国产特级淫片免费看| av女在线播放| 日本美女高潮视频| 欧美色爱综合| 国产国语老龄妇女a片| 欧美自拍丝袜亚洲| 成人444kkkk在线观看| 欧洲亚洲成人| 亚洲美女久久久| 日韩免费观看高清| 酒色婷婷桃色成人免费av网| 国产欧美精品一区二区三区介绍| 国产成人精品国内自产拍免费看| 欧美brazzers| 男女激烈动态图| 亚洲四区在线观看| gogogo影视剧免费观看在线观看| 野外性xxxxfreexxxxx欧美| 免费无码不卡视频在线观看| 国内精品久久久久久久影视简单| 黄大色黄女片18第一次| 99久久精品免费看国产交换| 特级丰满少妇一级aaaa爱毛片| 成人黄色激情视频| 伊人网站在线| 国产chinese中国hdxxxx| 天码人妻一区二区三区在线看| 国产欧美高清| 国产情侣av在线| 欧美性猛交xxxx免费看蜜桃| 久久这里只有精品视频网| 国内精品视频在线| 日韩欧美xxxx| 久久精品福利| 亚洲一本大道在线| 久久婷婷国产麻豆91天堂| 欧美a级片免费看| 欧美日韩最好看的视频| 久久久欧美精品sm网站| 久久久久在线视频| 亚洲高清视频免费| 亚洲欧美中文字幕| 你懂的网站在线| 91视频网页| yes4444视频在线观看| 深夜免费福利视频| 亚洲区精品久久一区二区三区| a天堂在线资源| 深田えいみ中文字幕99久久| 欧美一级黄色带| 亚洲av无码乱码国产麻豆| 国产原创精品视频| 强伦女教师2:伦理在线观看| 五月天婷婷网站| 中文字幕永久在线视频| 欧美成人中文字幕| 国产v日韩v欧美v| 亚洲欧洲成人自拍| 人妻 日韩 欧美 综合 制服| 欧美高清自拍一区| 蜜桃视频一区二区在线观看| 午夜免费福利视频在线观看| 国产精品亚洲一区二区三区在线观看| 亚洲欧洲一区| 天堂在线中文视频| 欧美一级中文字幕| 国产精品久久一区| 国产日韩欧美不卡| 黄色高清视频在线观看| 免费试看一区|