監(jiān)聽元素寬高改變(element onResize)

問題

思考如何實(shí)現(xiàn): 當(dāng)元素寬度<100px的時(shí)候, 將其中的文字豎向排列, 否則橫向排列.

1. window.onResize

元素的寬度改變不一定是由窗口大小改變導(dǎo)致的, 也可能是元素之間互相的影響, 所以監(jiān)聽窗口大小改變是行不通的.

2. 翻看瀏覽器API, 使用高級(jí)函數(shù) ResizeObserver

只是實(shí)驗(yàn)功能, 瀏覽器支持一片問號(hào).


browser compatibility

3. setInterval

是一個(gè)方法, 但太不高效和優(yōu)雅, 不到萬不得已不使用.

4. google / baidu

key: 監(jiān)聽dom元素大小改變.

搜之, 發(fā)現(xiàn)一個(gè)鬼才方案, 佩服這個(gè)腦洞: 通過添加超過元素本身大小的子元素, 監(jiān)聽元素的onScoll事件來實(shí)現(xiàn)監(jiān)聽width改變.

這是原文: 巧妙監(jiān)測(cè)元素尺寸變化.

這里也簡(jiǎn)單寫下我自己的理解, 同時(shí)也建議再看看更為詳細(xì)的原文.

完美的解決方案

完美(在此的定義): 性能可靠, 低耦合, 兼容瀏覽器.

先思考一個(gè)更簡(jiǎn)單的問題: 如何監(jiān)聽元素變高.

  • 瀏覽器為了讓使用者有更好的閱讀體驗(yàn), 會(huì)記住當(dāng)前滾動(dòng)條的位置, 就算頁面的高度發(fā)生了變化.
  • 滾動(dòng)的數(shù)值是滾動(dòng)出去的高度, 瀏覽器正是通過保持這個(gè)值不變?nèi)?shí)現(xiàn)保持元素的相對(duì)位置不變.
  • 但也有例外會(huì)導(dǎo)致元素的相對(duì)位置改變, 如滾動(dòng)到最底部, 而高度變高, 為了讓底部不留白, 就需要減少當(dāng)前元素的滾動(dòng)數(shù)值. 這時(shí)候就會(huì)觸發(fā)onscoll事件.

至此 我們已經(jīng)成功實(shí)現(xiàn)了監(jiān)聽頁面或者元素變高的事件.
而怎么實(shí)現(xiàn)監(jiān)聽變矮的事件卻又是一個(gè)問題.

  • 變矮的動(dòng)作下是怎么都不會(huì)出現(xiàn)上面必須修改滾動(dòng)值的例外情況的.
  • 其實(shí)總結(jié)上面的規(guī)律即可得到: scrollTop+父元素的高度是一定小于等于子元素的高度的(既: scrollTop+parentHeight<=childrenHeight), 如果讓子元素的高度也發(fā)生變化并且超過父元素的高度變化, 那么scrollTop就會(huì)發(fā)生改變.
  • 如何讓childrenHeight的變化數(shù)值大于parentHeight呢? 答案就是height:150%. 其實(shí)只需要比100%大即可.

現(xiàn)在道理都懂了吧, 監(jiān)聽寬度改變也是同理.

代碼就看原文吧.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,149評(píng)論 1 92
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,815評(píng)論 1 45
  • ??DOM 1 級(jí)主要定義的是 HTML 和 XML 文檔的底層結(jié)構(gòu)。 ??DOM2 和 DOM3 級(jí)則在這個(gè)結(jié)構(gòu)...
    霜天曉閱讀 1,599評(píng)論 1 3
  • ??JavaScript 與 HTML 之間的交互是通過事件實(shí)現(xiàn)的。 ??事件,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,690評(píng)論 1 11
  • 冬天真好。靴褲加棉襖。不用媽媽害怕,soeasy,不感冒。 起早,到處跑,快樂沒煩惱。對(duì)那皚皚白雪、輕輕笑、拍個(gè)照。
    琴詩(shī)音閱讀 248評(píng)論 0 4

友情鏈接更多精彩內(nèi)容