在严格模式下,body.scrollTop已被弃用。如果在严格模式下,请使用“documentElement.scrollTop”,只有在quirks模式下才使用“body.scrollTop”。

6

我收到了这个错误:

在严格模式下,body.scrollTop已被弃用。如果在严格模式下,请使用'documentElement.scrollTop',在怪异模式下请仅使用'body.scrollTop'。

我的代码如下:

$(document).ready(function(){

    //Animates Scrolling to anchor
    function scrollToAnchor(aid){
        var divTag = $("div[name='"+ aid +"']");
        $('html,body').animate({scrollTop: divTag.offset().top},'slow');
    }

    //If Checking out as guest, scroll to Shipping Information
    $("#ReadDescription").click(function() {
        scrollToAnchor('longdescreadmore');
    });

});

我该如何修改我的代码来使用documentElement.ScrollTop?


考虑使用 document.scrollTop 而不是 scrollTop 吗? - njzk2
1
可能是重复问题 https://dev59.com/jmIk5IYBdhLWcg3wDaQW - sgtdck
你正在寻找 document.documentElement。这是由 <html> 标签创建的元素。 - Dagg Nabbit
@DaggNabbit 这让我困惑了。呵呵。我把这放在哪里? - user2433689
@user2433689,这就是我说document.documentElement指的是由html标签创建的元素的原因;) - Dagg Nabbit
显示剩余2条评论
1个回答

14

达格纳比提供了解决方案。更改

$('html,body').animate({scrollTop: divTag.offset().top},'slow');
$('html').animate({scrollTop: divTag.offset().top},'slow');

如果你想避免在Chrome中出现弃用警告。(为什么body.scrollTop被弃用了?

它有效是因为documentElementhtml节点:

$('html')[0] === document.documentElement //-> true
$('body')[0] === document.body            //-> true

现在你的代码虽然有警告,但它正在工作,并且当Chrome移除“古怪”的行为时,它将继续工作。如果你想继续支持使用body.scrollTop来表示标准模式下滚动视口的浏览器(例如旧版Chrome和Safari),则不应该更改你的代码。


1
Sam是正确的。如果您在选择器中省略body部分,Safari 7.0.1(可能还有其他版本)将无法滚动到任何地方。 - Vestride
那么这里的重点是 - 不要更改代码来抑制警告? - jono
1
@Jon,像这样的代码已经针对标准和非标准行为(html,body)进行了优化,所以不需要更改。 - sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接