2017-07-12 57 views
45

Czy ktoś wie, dlaczego przypisanie scrollTop elementu nie działa?Chrome 61 body nie przewija się

np document.body.scrollTop = 200

powoduje, że dokument nie do przewijania.

Przyczyna: Chrom finally made scrolling spec conformant w wersji 61

Rozwiązanie Use scrollingElement

Aktualizacja przykładem:

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

Czy to jest pytanie? Wygląda bardziej jak odpowiedź – Morpheus

+6

Nie ma nic złego w publikowaniu pytania, na które można odpowiedzieć. Przepisz jako pytanie i odpowiedz na nie sam. –

+0

To jest pytanie zadane samodzielnie, ponieważ przewidujemy, że niektórzy autorzy javascript napotkają na to pytanie i chcemy, aby wskazówki były jasne na stronach, na których często szukają odpowiedzi. Zmieniłem go bardziej na format pytań. –

Odpowiedz

13

Rozwiązanie opisane na końcu tej kwestii (kontrola dla document.scrollingElement lub cofnięcie się do document.body) nie zadziała na IE, ponieważ nie ma upport document.scrollingElement (docs), aw IE elementem przewijania jest element HTML.

Sugerowałbym, że lepszym rozwiązaniem byłoby coś takiego;

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

Co powinno działać we wszystkich nowoczesnych przeglądarkach.


Jako marginesie, to ciekawe, aby uznać, że nieruchomość scrollingElement wydaje się, że zostały dodane jedynie w celu uczynienia go tak, że robimy nie trzeba czeki/fallbacks dla coraz korzeń przewijania elementu, ale z powodu większej liczby niezgodności przeglądarek nadal potrzebujemy sprawdzenia/powrotu, aby użyć scrollingElement.

Czy zabawa z WWW nie jest dobra?

0

Witam Mam podobny problem i zakończyłem dodawanie tego kodu do dokumentu gotowego i działa. również, mam problemy z niektórymi etykietkami, które zostały zgubione, a ten kod to naprawi.

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; 
     } 
    }; 

Mam nadzieję, że to może ci pomóc.

Dziękujemy