2017-06-08 35 views
-1

這可能是一個新手問題。我想要做什麼iswatch如果一個特定的元素具有自定義滾動條我想改變其父母的寬度。這完美的工作,如果我在setInterval包裝,因爲它將檢查所有的時間進行更改,但我擔心性能。如何在jQuery甚至Angularjs中更優雅地實現它?觀看DOM變化而不失性能(javascript)

(function($) { 
    $.fn.hasScrollBar = function() { 
    return this.get(0).scrollHeight > this.height(); 
    } 
})(jQuery); 
    if ($('#tab-content-3').hasScrollBar()) { 
     $('#basics md-content').css('width', '95%'); 
    } else { 
     $('#basics md-content').css('width', '100%'); 
    } 
+0

使用基於百分比的寬度來計算滾動條並不會非常健壯,即使不考慮使用'setInterval()'的事實' –

+0

什麼事件會導致滾動條出現?元素是否可以調整大小?可編輯?別的東西?你只是在尋找當用戶放大頁面(從而導致內容佔用更多的地方)?稍後,您可以偵聽「resize」事件。對於前者,這將取決於如何實施觸發器,但每個事件應該或多或少地可以收聽。 – Kaiido

回答

-1

您可以使用MutationObserver。大多數現代瀏覽器都支持這一功能,並且舊版瀏覽器有一個後備功能。

看看下面的例子和MutationObserver支持的各種配置。我建議使用MutationObserverattributes更改配置,以便對性能的影響最小。

MDN MutationObserver

Example Tutorial by Google

Similar Stackoverflow Answer

Underscore.js's throttle

你可以用它與underscore.js的油門的方法來提高性能一起。

+2

這個答案可以用一個基本的使用例子來改進。現在,它只是回答如何找到答案。 –

+0

MutationObserver具有性能影響。使用油門可能沒有什麼幫助,因爲它是內置函數 – Rajesh

+1

@Rajesh MutationObserver比'setInterval()'具有*多*少的性能影響。使用選項對象來改進它所反應的突變類型可以進一步提高其性能,但通常情況下,基於事件的方法比基於輪詢的方法更可取。 –