无法让scrollTop()在Chrome和Firefox中都能正常运行

Jon*_*eza 22 javascript firefox jquery google-chrome scrolltop

我无法使scrollTop()方法在Firefox和Chrome中都能正常工作.但我使用过$('body, html').scrollTop();,它在Chrome中不起作用.仅$('body').scrollTop();适用于Chrome.任何想法将不胜感激.以下是我的代码.

<!DOCTYPE html>
<html>
<head>
  <title>Demo</title>
  <style type="text/css">
  body {
    height: 2000px;
  }

  #light {
    display: block;
    position: fixed;
    top: 50%;
    left: 50%;
    margin-left: -400px;
    margin-top: -200px;
    width: 800px;
    height: 400px;
    background-color: blue;
    z-index:1002;
    overflow: auto;
  }
</style>
</head>

<body>
  <div id="light">
  </div>

<!-- Used the google jQuery link for ease of use in this example   -->
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js"></script>
  <script type="text/javascript">
    $(document).ready(function() {
      $(window).scroll(function () {
        var offset = $('body, html').scrollTop();
        var view = $(window).height();
        var total = $(document).height();
        var percent = 1-(offset / (total - view));
        var widthFactor = 800*percent;
        var marginFactor = -(400*percent)

        if(percent > 0.33){
          $("#light").css({ "width" : widthFactor,
                      "margin-left" : marginFactor});
        };
      });
    });
  </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Dus*_*ake 32

请改用文档对象

$(document).scrollTop();
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用.小方评论.如果使用animate()滚动文档,则需要使用$("html,body"). (3认同)
  • 我希望有一种方法可以将SO答案标记为"过时且无关紧要",因为谷歌的最高结果让我感到疯狂,结果是因为它是从2010年开始的.这是人们需要的答案. (2认同)

Dou*_*leA 11

我有同样的问题.对我来说最好的解决方案是window:

var offset = $(window).scrollTop();
Run Code Online (Sandbox Code Playgroud)

为了使其工作,您的body和html元素不能height设置为100%.使用min-height替代

编辑:HTML元素可以使用height: 100%,但是如果你需要body拉伸到全高,你必须使用min-height: 100%.否则scrollTop总是返回"0"