jQuery scrollTop()方法不起作用

MD *_*ari 8 html javascript css jquery scroll

我有以下jQuery代码

$(document).ready(function () {
    $('.navtoTop').click(function(){
           $("html").scrollTop( $("#topofthePage").offset().top );
    }); 
});
Run Code Online (Sandbox Code Playgroud)

其中'navtoTop'是按钮的类(类似'返回顶部'),它在页面的左下角有固定位置,'topofthePage'是<div>我页面最顶部的id .

我甚至试过这个

$('.navtoTop').click(function(){
    $('html, body').animate({scrollTop : 0},800);
    return false;
});
Run Code Online (Sandbox Code Playgroud)

这是html代码

<body>
    <div id="topofthePage"></div>
    ...
    ...
    <img src="navtoTop.png" class="navtoTop">   
</body>
Run Code Online (Sandbox Code Playgroud)

我不知道出了什么问题,但这不起作用.有人会解释并给出一个好的解决方案吗?

如果需要,请向我询问代码的详细信息.

tax*_*ala 15

你必须使用window而不是html:

$(window).scrollTop( $("#topofthePage").offset().top );
Run Code Online (Sandbox Code Playgroud)

请注意,window不应将其括在引号中,因为它是对象而不是标记.


CR *_*son 6

一个常见的 scrollTo 问题是在 css 中的“html, body”元素上设置了溢出。在 html/body 元素上出现滚动/动画问题时很少提及,最终可能会导致过度设计。

如果需要设置overflow,只放在body元素上即可。不是 html,body。

使用 data-* 属性代替 html 中的类或 ID 也是一个好习惯。这让您养成将样式与代码分开的习惯。考虑这一点,让您将来的生活更轻松:

创建可重用的滚动函数

scrollioreceiver = function(sender) {

  $(sender).on({
    click: sentFrom
  });

  function sentFrom(){
    var dataMine = $(this).attr('data-sender'),
        dataSend = $('[data-receiver="'+dataMine+'"]');

    $('html, body').animate({
        scrollTop: $(dataSend).offset().top - 70
    }, 800, function() {
        // if you need a callback function
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

为 html 元素创建数据属性(数据名称是任意的,应该有意义):

添加 HTML 链接

<a data-sender="ScrollToMatch">Link To Click To Scroll To Match Attribute</a> 
Run Code Online (Sandbox Code Playgroud)

添加 HTML 元素

<div data-receiver="ScrollToMatch">Scrolls To This Element</div>
Run Code Online (Sandbox Code Playgroud)

验证 CSS » 添加到“html,body”的溢出不起作用

body { overflow-x: hidden; }
Run Code Online (Sandbox Code Playgroud)

INIT FUNCTION ON READY » 使用属性名称选择器在文档就绪时进行初始化,以在多个调用上创建灵活性

scrollioreceiver('[data-sender]');
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!