最近在寫外掛程式的過程中,需要使用 js 判斷是否有滾動條,搜了一下,大致方法都差不多,但都有些囉嗦,**不夠簡潔。最終通過參考不同方法,寫了乙個比較簡單的方法。在判斷滾動條的同時也需要計算滾動條的寬度,通過本篇文章一併與大家分享。
判斷滾動條的需求在彈窗外掛程式中用的較多,因為彈窗大多會新增overflow: hidden
的屬性,如果頁面比較長的話,新增這個屬性之後頁面會有晃動。
為了增強使用者體驗,通過判斷是否有滾動條而新增margin-left
屬性以抵消overflow: hidden
之後的滾動條位置。
其實只需要一行 js 就可以,測試相容 ie7
function一般情況下,使用hasscrollbar()
document.body.scrollheight > window.innerheight
就可以判斷。
但是在 ie7,ie8 中window.innerheight
為underfined
,所以為了相容 ie7、ie8,需要使用document.documentelement.clientheight
屬性計算視窗高度。
還是以彈窗為例,因為 ie 10 以上以及移動端瀏覽器的滾動條都是不佔據頁面寬度的透明樣式(其中 ie 10 以上瀏覽器可以通過 css 屬性還原原始的滾動條樣式),所以為了進一步增強使用者體驗,我們還需要計算滾動條的寬度,根據情況新增合理的margin-left
數值。
計算滾動條寬度的方法比較簡單,新建乙個帶有滾動條的div
元素,通過該元素的offsetwidth
和clientwidth
的差值即可獲得,我在此借鑑 magnific-popup 中的方法
function使用 js 實現乙個功能可能並不困難,但作為程式設計人員應該時刻思考如何更簡單更優雅的實現這個功能,並且時刻以提公升使用者體驗為原則。對於條件判斷,也許十行的邏輯判斷可能只需要一行,最近感受極為深刻,而且要善於使用三元表示式替代getscrollbarwidth()
if..else
來精簡**。 如何判斷頁面是否有滾動條?
橫向滾動條 當可視區域小於頁面的實際寬度時,判定為出現滾動條,即 if document.documentelement.clientwidth document.documentelement.offsetwidth 豎向滾動條 當可視區域小於頁面的實際高度時,判定為出現滾動條,即 if docu...
JS判斷頁面是否出現滾動條
當可視區域小於頁面的實際高度時,判定為出現滾動條,即 if document.documentelement.clientheight document.documentelement.offsetheight scroll true 要使用 document.documentelement 必須在...
JS判斷頁面是否出現滾動條
今天無聊,幫乙個解決乙個很無聊的問題,用js判斷頁面是否出現滾動條,在網上看了一些 經過驗證並不起作用,下面是在網上搜尋到的 當可視區域小於頁面的實際高度時,判定為出現滾動條,即 if document.documentelement.clientheight document.documentel...