2015-01-07 52 views
2

我有一個問題,它進入了一種調試。我希望你問,我怎麼能找出整個標記的哪個元素導致滾動條。任何一種方法都可以。 我想過在開發者工具中搜索overflow,但是這對我沒有任何幫助。如何找出哪個元素導致滾動條

有誰知道我該如何解決這個問題?

+0

顯示它發生的頁面 – RST

+1

@RST我沒有它,我想這對這個問題並不重要。很顯然,我可以在很長一段時間後進行搜索並找到它,但是我想動態地找到它。 – supersize

+1

可能的重複:http://stackoverflow.com/questions/4880381/check-whether-html-element-has-scrollbars – hindmost

回答

1

你會想檢查一些東西。首先,一個元素會產生一個會產生滾動條的溢出:overflow: scroll強制它們,如果需要,overflow: auto會顯示它們。如果溢出是自動的,您可以檢查它的滾動高度與實際高度。

function isScroller(el) { 
    var isScrollableWidth, isScollableHeight, elStyle; 
    elStyle = window.getComputedStyle(el, null); // Note: IE9+ 
    if (elStyle.overflow === 'scroll' || 
     elStyle.overflowX === 'scroll' || 
     elStyle.overflowY === 'scroll') { 
     return true;   
    } 
    if (elStyle.overflow === 'auto' || 
     elStyle.overflowX === 'auto' || 
     elStyle.overflowY === 'auto') { 
     if (el.scrollHeight > el.clientHeight) { 
      return true; 
     } 
     if (el.scrollWidth > el.clientWidth) { 
      return true; 
     } 
    } 
    return false; 
} 

var els = document.querySelectorAll('body *'); 
for (var i = 0, el; el = els[i]; i++) { 
    if (isScroller(el)) { 
     console.log(el); 
    } 
} 

這裏你可以看到它(打開控制檯):http://jsfiddle.net/rgthree/zfyhby1j/

注意,一些觸摸設備可能不會產生實際的「滾動條」滾動時除外。這不會檢測到,而是該元素能夠滾動。