2016-03-21 10 views
3

私のウェブサイトのjsの1つが、ページの先頭に不要なスクロールを引き起こします。 jsがscrollTopプロパティを変更しているときにChrome Developers Toolsで休憩をとる方法scrollTopの変更を破る方法は?

答えて

2

以下のコードを貼り付けた後、onVerticalScroll(function(){debugger});を実行してください。

JavaScriptを使用してスクロール位置が明示的に設定されている場合にのみ、これは一時停止することに注意してください。たとえば、大きな要素が一時的にページから消えてビューポートがジャンプした場合、トリガしません。

function onVerticalScroll(fnOnScroll){ 
    var originalScrollTop = getPropertyDescriptor(HTMLElement.prototype, "scrollTop"); 
    Object.defineProperty(HTMLElement.prototype, "scrollTop", { 
     get: function(){ 
      return originalScrollTop.get.apply(this, arguments);  
     }, 
     set: function(){ 
      fnOnScroll(); 
      return originalScrollTop.set.apply(this, arguments); 
     } 
    }); 

    var originalScrollTo = window.scrollTo; 
    window.scrollTo = function(){ 
     fnOnScroll(); 
     return originalScrollTo.apply(this, arguments); 
    } 
    var originalScrollBy = window.scrollBy; 
    window.scrollBy = function(){ 
     fnOnScroll(); 
     return originalScrollBy.apply(this, arguments); 
    } 

    function getPropertyDescriptor(object, propertyName){ 
     var descriptor = Object.getOwnPropertyDescriptor(object, propertyName); 
     if (!object){ 
      throw new Error("descriptor not found"); 
     } 
     if (!descriptor) { 
      return getPropertyDescriptor(Object.getPrototypeOf(object), propertyName); 
     } 
     return descriptor; 
    } 
} 
関連する問題