2017-07-12 38 views
45

有誰知道爲什麼在正文元素上指定scrollTop不再有效嗎?Chrome 61正文不滾動

如: document.body.scrollTop = 200

導致文件無法滾動。

原因:鉻finally made scrolling spec conformant在版本61

:使用scrollingElement

更新的示例於:

var scrollNode = document.scrollingElement ? 
       document.scrollingElement : document.body; 
scrollNode.scrollTop = 200; 
+7

這是一個問題?看起來更像是一個答案 – Morpheus

+6

發佈自我回答的問題沒有任何問題。請重寫爲問題並自己回答。 –

+0

是的,這是一個自我回答的問題,因爲我們預計一些javascript作者會遇到這個問題,我們希望在他們經常尋找答案的網站上明確指導。我已經將它更改爲問題格式。 –

回答

13

在這個問題的末尾描述的解決方案(檢查爲document.scrollingElement或回落到document.body)將無法在IE瀏覽器上工作,因爲它不會支持document.scrollingElementdocs),在IE中,滾動元素是HTML元素。

因此,我建議對此的更好的解決方案是類似的;

var scrollNode = document.scrollingElement || document.documentElement; 

這應該適用於所有現代瀏覽器。


一點題外話,它們也同樣吸引認爲scrollingElement屬性似乎已被添加使得它的唯一目的,使我們需要獲得根滾動元件的檢查/回退,但由於瀏覽器不兼容問題,我們仍然需要檢查/回退才能使用scrollingElement

是不是web開發樂趣?

0

你好,我有一個類似的問題,我結束了這個代碼添加到文檔準備就緒,它的工作原理。 另外,我有一些錯誤的工具提示的問題,這段代碼修復了它。

window.onload = function() { 
     var GetDocumentScrollTop = function() { 
      var isScrollBodyIE = ASPx.Browser.IE && ASPx.GetCurrentStyle(document.body).overflow == "hidden" && document.body.scrollTop > 0; 
      if (ASPx.Browser.WebKitFamily || isScrollBodyIE) { 
       if (ASPx.Browser.MacOSMobilePlatform) 
        return window.pageYOffset; 
       else if (ASPx.Browser.WebKitFamily) 
        return document.documentElement.scrollTop || document.body.scrollTop; 
       return document.body.scrollTop; 
      } 
      else 
       return document.documentElement.scrollTop; 
     }; 
     var _aspxGetDocumentScrollTop = function() { 
      if (__aspxWebKitFamily) { 
       if (__aspxMacOSMobilePlatform) 
        return window.pageYOffset; 
       else 
        return document.documentElement.scrollTop || document.body.scrollTop; 
      } 
      else 
       return document.documentElement.scrollTop; 
     } 
     if (window._aspxGetDocumentScrollTop) { 
      window._aspxGetDocumentScrollTop = _aspxGetDocumentScrollTop; 
      window.ASPxClientUtils.GetDocumentScrollTop = _aspxGetDocumentScrollTop; 
     } else { 
      window.ASPx.GetDocumentScrollTop = GetDocumentScrollTop; 
      window.ASPxClientUtils.GetDocumentScrollTop = GetDocumentScrollTop; 
     } 
    }; 

希望這可以幫助你。

謝謝