色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

如何設計一個typed

劉姿婷2年前15瀏覽0評論

如何設計一個typed?

在平時的工作當中,我們在操作dom的樣式的時候,其實操作的就是css的對象模型cssOM,其實在16年的時候,就發布了一組新的對象模型cssTypeOM,這是一個全新的操作css樣式的方式,它的好處有很多,我們一一列舉。

在講解cssOM和cssTypeOM的區別的同時,我們要了解瀏覽器是如何渲染視圖的:

1、解析html后構建dom對象

2、解析css后構建cssOM對象

3、瀏覽器將dom與css組成渲染樹

4、最終瀏覽器渲染到視圖中

cssOM

var width = 100;

document.body.style.width = width + 'px';

//需要修改時

document.body.style.width = (width + n(要改變的值)) + 'px';

復制代碼

這就是cssOM目前存在的問題,它沒有辦法基于目前的值去做屬性的變更,如果想在基礎上做變更,你還需要去先獲取到當前的值(是個字符串),轉換成數字,才能去做遞增或者遞減的操作,這個樣子運算成本很大,還會有可能出現不必要的bug。

typedOM

typedOM的出現,給我們對樣式的增刪改查操作提供了很大的便利,typedOM不同于cssOM,它不是通過字符串表現形式去修改一個值,而是通過map對象的形式去修改一個值,并且,所有屬性的名稱直接可以按照css樣式的方式去設置,不用寫駝峰了。

如何確認我們的瀏覽器,是否支持typedOM呢?

window.CSS && CSS.number

復制代碼

typedOM的操作方式綁定在dom的attributeStyleMap方法上,是一個StylePropertyMap對象,該對象提供了四個方法:

append:

暫時還沒有搞明白怎么用,在MDN中的文檔中所說的,和實際操作的不同,如果有知道的小伙伴請及時留言,好讓我及時跟進文檔

set:

dom.attributeStyleMap.set(prop,val)

//示例

document.body.attributeStyleMap.set('width','100px')

//或

document.body.attributeStyleMap.set('width', CSS.px(100))

復制代碼

用來設定某一個屬性。

clear:

dom.attributeStyleMap.clear()

復制代碼

用來清除所有StylePropertyMap中設置的屬性,但是并不會清除掉樣式表當中設置的屬性。

delete:

dom.attributeStyleMap.delete(prop)

復制代碼

用來清除某一個指定的屬性,但是并不會清除掉樣式表當中設置的屬性。

在StylePropertyMap的原型鏈上,還有一個get方法,可以通過傳對應的prop,并返回一個對象,對象里面包括兩個值,一個是對應的數值,一個是該屬性值的單位:

dom.attributeStyleMap.get('width')

//{value: 100, unit: "px"}

復制代碼

總結

其實,css typed OM遠不止我文檔里面寫的這些,還有很多數學操作的方法,便于我們更快的進行計算。

綜上所述,我們其實可以看出來一些css typed OM的優勢了,這里我在總結一下:

1、最大限度的降低了通過字符串表現形式去修改css樣式,降低了出現此類bug的風險

2、通過css typed OM的運算方法,最短時間最快的去進行樣式運算

3、錯誤處理,如果有接收到錯誤的css,就會直接拋出錯誤,方便在最短的時間去定位問題

4、由于dom上的attributeStyleMap方法是一個StylePropertyMap對象,所以方便使用所有的map對象的方法

5、更好的性能!!!由于減少了字符串操作,對于 CSSOM 的操作性能得到了更進一步的提升,由 Tab Akins 提供的測試表明,操作 Typed OM 比直接操作 CSSOM 字符串帶來了大約 30% 的速度提升

瀏覽器兼容

該api在部分瀏覽器支持方面,可能會比較差,建議如果想提升性能的同時,又需要兼容n種瀏覽器,請提前寫好兼容性代碼,保證用戶體驗。