web-dev-qa-db-fra.com

Chrome 61 le corps ne défile pas

Est-ce que quelqu'un sait pourquoi assigner scrollTop sur l'élément body ne fonctionne plus?

par exemple: document.body.scrollTop = 200

ne fait pas défiler le document.

Cause : Chrome enfin conforme aux spécifications de défilement en version 61

Solution : Utilisez scrollingElement

Mettez à jour l'exemple pour:

var scrollNode = document.scrollingElement ? 
                 document.scrollingElement : document.body;
scrollNode.scrollTop = 200;
53
Dave Tapuska

La solution décrite à la fin de cette question (recherche de document.scrollingElement ou retomber sur document.body) ne fonctionnera pas sur IE, car il ne supporte pas document.scrollingElement _ ( docs ), et dans IE, l'élément scroll est l'élément HTML.

Je suggérerais donc qu'une meilleure solution pour cela serait quelque chose comme:

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

Ce qui devrait fonctionner pour tous les navigateurs modernes.


En tant que note de bas de page, il est intéressant de noter que la propriété scrollingElement semble avoir été ajoutée dans le seul but de la rendre de telle sorte que nous ne le fassions pas nécessite des vérifications/substitutions pour obtenir l'élément de défilement racine, mais en raison d'incompatibilités accrues avec les navigateurs, nous avons encore besoin d'une vérification/repli pour pouvoir utiliser scrollingElement.

Web dev n'est-il pas amusant?

14
Pudge601

Bonjour, j'ai un problème similaire et j'ai fini d'ajouter ce code au document prêt et cela fonctionne. De plus, j'ai des problèmes avec des info-bulles mal placées et ce code corrige le problème.

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

J'espère que cela pourrait vous aider.

Remercier

0