DOM - getComputedStyle不為人知的黑科技

getComputedStyle就是計算dom的style屬性的复斥,但是他還有一個很很大的作用

js動態(tài)生成節(jié)點, 控制起始動畫目锭,或者連續(xù)修改style的時候, 如果你給他一個動畫屬性侣集,會發(fā)現(xiàn)并沒有動畫,

世分??臭埋?

在這個過程中,瀏覽器會自動取最后一個值瓢阴,并且修改Dom, 看例子

Node.style.left = '0px'
node.style.left = '100px'

這時候瀏覽器只會執(zhí)行一次Dom更新荣恐, 那就是最后一個。(低版本的瀏覽器叠穆,比如IE不算在內(nèi))

于是style只更新一次, 就會發(fā)現(xiàn)硼被, 動畫并沒有被執(zhí)行!嚷硫!
這時候一般的大家都是setTimeout來解決始鱼, 可是瀏覽器無法八門脆贵, 優(yōu)化的時間控制也不一樣医清。 給100ms又太浪費了丹禀,這時候代碼潔癖的人鞋怀,就很痛苦双泪。

今天我偶然發(fā)現(xiàn)一個一個神器的代碼密似。我們看下下面一行很熟悉的代碼
winow.getComputedStyle(Node).styleKey

對,就是他了残腌。

為了方便大家測試,下面有一個js代碼抛猫,粘貼控制臺看效果吧。

{
    var id = "TEST"
    var div = document.createElement('div')

    if(window[id]){
        document.body.removeChild(window[id])
    }
    div.id = id
    div.style.cssText = `width: 20px; height: 20px; border-radius: 50%; background-color: red; position: fixed;z-index:9999; top: 0;    transition: all 1s;`
    document.body.appendChild(div)


    var test = () => {
        div.style.left = "2px"
        if(true){
            //這個屬性會強行更新一波DOM
            window.getComputedStyle(div).left
            
            // test
            var animate = () => {
                div.style.left = "100px"
            }
            animate()
        } else {
            window.setTimeout(() => {
                div.style.left = "200px"
            }, 200)
        }
    
    }

    test()
    
}

getComputedStyle兼容IE9+

移動端使用沒有問題


嗯闺金, 這個會讓瀏覽器計算, 會發(fā)生重繪败匹, 所以就, 破壞了優(yōu)化掀亩, 強制更新。

下面這些都是會引起重繪的

offsetTop槽棍、offsetLeft捉蚤、 offsetWidth炼七、offsetHeight、scrollTop特石、scrollLeft、scrollWidth姆蘸、scrollHeight芙委、 clientTop、clientLeft灌侣、clientWidth、clientHeight侧啼、getComputedStyle() (currentStyle in IE)

--告辭--

--END--

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市痊乾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哪审,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件湿滓,死亡現(xiàn)場離奇詭異舌狗,居然都是意外死亡,警方通過查閱死者的電腦和手機痛侍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恋日,“玉大人,你說我怎么就攤上這事岂膳。” “怎么了谈截?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長毙死。 經(jīng)常有香客問我,道長扼倘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任再菊,我火速辦了婚禮,結(jié)果婚禮上纠拔,老公的妹妹穿的比我還像新娘秉剑。我一直安慰自己,他們只是感情好稠诲,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布侦鹏。 她就那樣靜靜地躺著,像睡著了一般臀叙。 火紅的嫁衣襯著肌膚如雪略水。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天匹耕,我揣著相機與錄音聚请,去河邊找鬼荠雕。 笑死稳其,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的炸卑。 我是一名探鬼主播既鞠,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼盖文!你這毒婦竟也來了嘱蛋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤五续,失蹤者是張志新(化名)和其女友劉穎洒敏,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疙驾,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年它碎,在試婚紗的時候發(fā)現(xiàn)自己被綠了函荣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡扳肛,死狀恐怖傻挂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挖息,我是刑警寧澤滨巴,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站镶奉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏轿衔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一睦疫、第九天 我趴在偏房一處隱蔽的房頂上張望害驹。 院中可真熱鬧,春花似錦蛤育、人聲如沸宛官。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽底洗。三九已至,卻和暖如春咕娄,著一層夾襖步出監(jiān)牢的瞬間亥揖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工圣勒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留费变,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓圣贸,卻偏偏與公主長得像挚歧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吁峻,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容