55 votes

Le corps du Chrome 61 ne défile pas

Quelqu'un sait-il pourquoi assigner scrollTop sur l'élément body ne fonctionne plus ?

eg : document.body.scrollTop = 200

fait en sorte que le document ne défile pas.

Cause : Chrome a finalement rendu la spécification de défilement conforme dans la version 61

Solution : Utiliser scrollingElement

Mettez l'exemple à jour :

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

7 votes

Est-ce une question ? Cela ressemble plus à une réponse

6 votes

Il n'y a rien de mal à poster une question à laquelle on a répondu soi-même. Veuillez la réécrire sous forme de question et y répondre vous-même.

0 votes

Oui, c'est une question à réponse automatique, car nous prévoyons que certains auteurs de javascript seront confrontés à ce problème et nous voulions que les conseils soient clairs sur les sites où ils cherchent fréquemment des réponses. J'ai modifié le format pour qu'il ressemble plus à une question.

16voto

Pudge601 Points 2048

La solution décrite à la fin de cette question (vérification de la présence de document.scrollingElement ou de se rabattre sur document.body ) ne fonctionnera pas sous IE, car il ne prend pas en charge l'application document.scrollingElement ( docs ), et dans IE, l'élément de défilement est l'élément HTML.

Je suggérerais donc qu'une meilleure solution pour cela serait quelque chose du genre ;

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

Ce qui devrait fonctionner pour tous les navigateurs modernes.


À titre d'anecdote, il est intéressant de considérer que la scrollingElement semble avoir été ajoutée dans l'unique but de faire en sorte que nous Ne le fais pas. ont besoin de contrôles/rétrobalances pour obtenir l'élément de défilement racine, mais en raison d'autres incompatibilités entre navigateurs, nous avons toujours besoin d'un contrôle/rétrobalance afin d'utiliser scrollingElement .

Le développement web n'est-il pas amusant ?

0 votes

J'ai toujours un scénario où document.scrollingElement est le documentElement mais le documentElement occupe toute la hauteur de défilement, et il n'y a aucun élément dans le DOM qui possède réellement la barre de défilement (c'est comme si elle était sur la fenêtre).

-1voto

J'ai fini par ajouter ce code au document prêt et cela fonctionne. Aussi, j'ai eu des problèmes avec certaines infobulles qui étaient mal placées et ce code l'a corrigé :

    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 pourra vous aider.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X