摘要:判斷元素是否有滾動(dòng)條因?yàn)槌霈F(xiàn)滾動(dòng)條便意味著元素空間將大于其內(nèi)容顯示區(qū)域,根據(jù)這個(gè)現(xiàn)象便可以得到判斷是否出現(xiàn)滾動(dòng)條的規(guī)則。
判斷元素是否有滾動(dòng)條
因?yàn)槌霈F(xiàn)滾動(dòng)條便意味著元素空間將大于其內(nèi)容顯示區(qū)域,根據(jù)這個(gè)現(xiàn)象便可以得到判斷是否出現(xiàn)滾動(dòng)條的規(guī)則。判斷豎向滾動(dòng)條
el.scrollHeight > el.clientHeight
這條規(guī)則使用了獲取元素不同高度的兩個(gè)屬性:
scrollHeight
指的是元素的內(nèi)容高度,即如果有滾動(dòng)條,它的值會(huì)等于內(nèi)容實(shí)際的高度加padding值(并不包含border和margin值),在沒(méi)有內(nèi)容溢出的情況下它的值等于clientHeight;
clientHeight
指的是元素的內(nèi)部高度的px值,包括content和padding值之和,并不包括橫向滾動(dòng)條(horizontal scrollbar)、border和margin的值。
故而如果每個(gè)元素的scrollHeight值大于clientHeight值,則可以說(shuō)明其出現(xiàn)了豎向滾動(dòng)條。判斷橫向滾動(dòng)條
el.scrollWidth > el.clientWidth
同樣這里使用了獲取元素寬度的兩個(gè)屬性:
scrollWidth
指的是遠(yuǎn)的內(nèi)容高度,即它的值會(huì)等于內(nèi)容實(shí)際的寬度加上padding值(不包含border和margin值),在沒(méi)有內(nèi)容溢出的情況下它的值等于clientWidth;
clientWidth
指的是元素的內(nèi)部寬度的px值,包括content和padding值之和,并不包括橫向滾動(dòng)條(horizontal scrollbar)、border和margin的值。
故而如果每個(gè)元素的scrollWidth值大于clientWidth值,則可以說(shuō)明其出現(xiàn)了橫向滾動(dòng)條。兼容性
scrollWidth/scrollHeight:IE8及以上、Chrome 4.0、FireFox 3.0、Safari 4.9 和Opera均支持兼容該屬性;
clientWidth/clientWidth:IE6以上及其他現(xiàn)代瀏覽器都支持該屬性。
特殊情況當(dāng)元素指定了`overflow:hidden`時(shí),是不會(huì)出現(xiàn)滾動(dòng)條的,就算元素的內(nèi)容尺寸超過(guò)了元素尺寸也是不會(huì)出現(xiàn) 滾動(dòng)條的,所以這里需要對(duì)元素是否應(yīng)用了`overflow:hidden`進(jìn)行判斷。
getComputedStyle
使用window對(duì)象下的getComputedStyle方法,可以獲得元素中最終應(yīng)用的CSS屬性值,并且返回一個(gè) CSSStyleDeclaration對(duì)象。故而我們可以通過(guò)以下寫法來(lái)獲取最終應(yīng)用于元素上overflow的值:
window.getComputedStyle(el).getPropertyValue("overflow")
currentStyle
鑒于getComputedStyleIE9以下不支持,故而這里需要使用IE中特有的currentStyle來(lái)獲取最終應(yīng)用于元素中的overflow屬性值:
el.currentStyle.overflow總結(jié)
綜上可以得出判斷元素出現(xiàn)滾動(dòng)條方法的代碼,如下: function hasScrolled(el, direction = "vertical") { if(direction === "vertical") { return el.scrollHeight > el.clientHeight; }else if(direction === "horizontal") { return el.scrollWidth > el.clientWidth; } }
在線Demo:http://codepen.io/willshawzq/pen/PPVdNX
參考文檔http://www.zhangxinxu.com/wordpress/2012/05/getcomputedstyle-js-getpropertyvalue-currentstyle/
https://developer.mozilla.org/en-US/docs/Web/API/Element/clientWidth
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/86225.html
摘要:判斷元素是否有滾動(dòng)條因?yàn)槌霈F(xiàn)滾動(dòng)條便意味著元素空間將大于其內(nèi)容顯示區(qū)域,根據(jù)這個(gè)現(xiàn)象便可以得到判斷是否出現(xiàn)滾動(dòng)條的規(guī)則。 判斷元素是否有滾動(dòng)條 因?yàn)槌霈F(xiàn)滾動(dòng)條便意味著元素空間將大于其內(nèi)容顯示區(qū)域,根據(jù)這個(gè)現(xiàn)象便可以得到判斷是否出現(xiàn)滾動(dòng)條的規(guī)則。 判斷豎向滾動(dòng)條 el.scrollHeight > el.clientHeight 這條規(guī)則使用了獲取元素不同高度的兩個(gè)屬性: scroll...
摘要:在這里一次性做個(gè)總結(jié),以用來(lái)判斷元素是否在可視區(qū)域以及用原生簡(jiǎn)單實(shí)現(xiàn)懶加載。被隱藏在內(nèi)容區(qū)域左側(cè)的像素?cái)?shù)。比如上篇文章文字跑馬燈項(xiàng)目中的使用戳此跳轉(zhuǎn)小結(jié)只讀屬性,不包括滾動(dòng)條。 個(gè)性簽名: 生如夏花,逝如冬雪;人生如此,何悔何怨。 前言: 經(jīng)常需要計(jì)算元素的大小或者所在頁(yè)面的位置,offsetWidth,clientWidth,scrollWidth,scrollTop這幾個(gè)關(guān)鍵字的出...
摘要:在這里一次性做個(gè)總結(jié),以用來(lái)判斷元素是否在可視區(qū)域以及用原生簡(jiǎn)單實(shí)現(xiàn)懶加載。被隱藏在內(nèi)容區(qū)域左側(cè)的像素?cái)?shù)。比如上篇文章文字跑馬燈項(xiàng)目中的使用戳此跳轉(zhuǎn)小結(jié)只讀屬性,不包括滾動(dòng)條。 個(gè)性簽名: 生如夏花,逝如冬雪;人生如此,何悔何怨。 前言: 經(jīng)常需要計(jì)算元素的大小或者所在頁(yè)面的位置,offsetWidth,clientWidth,scrollWidth,scrollTop這幾個(gè)關(guān)鍵字的出...
摘要:在這里一次性做個(gè)總結(jié),以用來(lái)判斷元素是否在可視區(qū)域以及用原生簡(jiǎn)單實(shí)現(xiàn)懶加載。被隱藏在內(nèi)容區(qū)域左側(cè)的像素?cái)?shù)。比如上篇文章文字跑馬燈項(xiàng)目中的使用戳此跳轉(zhuǎn)小結(jié)只讀屬性,不包括滾動(dòng)條。 個(gè)性簽名: 生如夏花,逝如冬雪;人生如此,何悔何怨。 前言: 經(jīng)常需要計(jì)算元素的大小或者所在頁(yè)面的位置,offsetWidth,clientWidth,scrollWidth,scrollTop這幾個(gè)關(guān)鍵字的出...
閱讀 2201·2021-11-22 11:56
閱讀 2647·2021-10-08 10:05
閱讀 7772·2021-09-22 15:53
閱讀 1910·2021-09-22 15:29
閱讀 2234·2021-09-08 09:35
閱讀 3354·2021-09-07 10:12
閱讀 1379·2019-08-30 13:11
閱讀 1968·2019-08-28 17:54