【问题标题】:Scroll indicator JavaScript滚动指示器 JavaScript
【发布时间】:2018-11-14 08:32:50
【问题描述】:

我将以下代码用于包含在多个页面上的滚动指示器。

window.onscroll = function() {
  myFunction()
};

function myFunction() {
  var winScroll = document.body.scrollTop || document.documentElement.scrollTop;
  var height = document.documentElement.scrollHeight - document.documentElement.clientHeight;
  var scrolled = (winScroll / height) * 100;
  document.getElementById("myBar").style.width = scrolled + "%";
}
.progress-container {
  width: 100%;
  height: 8px;
  background: #ccc;
  position: fixed;
  top: 0;
  z-index: 1000;
}

.progress-bar {
  height: 8px;
  background: #4caf50;
  width: 0%;
}
<div class="fixedBar">
  <div class="header">
    <div class="progress-container">
      <div class="progress-bar" id="myBar"></div>
    </div>
  </div>
</div>

但是由于缺少内容,某些页面无法滚动我正在尝试让滚动指示器也被填充我无法弄清楚如果它无法滚动为什么它不能填充(我不擅长JavaScript 要么:3)

【问题讨论】:

    标签: javascript html css


    【解决方案1】:

    试试这个:

    <!DOCTYPE html>
    <html>
    <head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
    body {
      margin: 0;
      font-size: 28px;
      font-family: Arial, Helvetica, sans-serif;
    }
    
    .header {
      position: fixed;
      top: 0;
      z-index: 1;
      width: 100%;
      background-color: #f1f1f1;
    }
    
    .header h2 {
      text-align: center;
    }
    
    .progress-container {
      width: 100%;
      height: 8px;
      background: #ccc;
    }
    
    .progress-bar {
      height: 8px;
      background: #4caf50;
      width: 0%;
    }
    
    .content {
      padding: 100px 0;
      margin: 50px auto 0 auto;
      width: 80%;
    }
    </style>
    </head>
    <body>
    
    <div class="header">
      <h2>Scroll Indicator</h2>
      <div class="progress-container">
        <div class="progress-bar" id="myBar"></div>
      </div>  
    </div>
    
    <div class="content">
      <h3>Scroll Down to See The Effect</h3>
      <p>We have created a "progress bar" to <b>show how far a page has been scrolled</b>.</p>
      <p>It also <b>works when you scroll back up</b>.</p>
      <p>It is even <b>responsive</b>! Resize the browser window to see the effect.</p>
      <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
      <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
      <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
      <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
      <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
      <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
      <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
      <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
      <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
      <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
    </div>
    
    <script>
    // When the user scrolls the page, execute myFunction 
    window.onscroll = function() {myFunction()};
    
    function myFunction() {
      var winScroll = document.body.scrollTop || document.documentElement.scrollTop;
      var height = document.documentElement.scrollHeight - document.documentElement.clientHeight;
      var scrolled = (winScroll / height) * 100;
      document.getElementById("myBar").style.width = scrolled + "%";
    }
    </script>
    
    </body>
    </html> 

    (在 W3Schools 上找到它!)

    【讨论】:

      【解决方案2】:

      两件事:

      • 在页面加载时至少执行一次您的函数
      • 检查文档是否没有滚动并在这种情况下设置全宽。

      这里是:

      // When the user scrolls the page, execute myFunction
      window.onscroll = function () {
          myFunction()
      };
      
      // Execute myFunction once when the page is loaded
      window.onload = function() {
        myFunction();
      }
      
      function myFunction() {
          var winScroll = document.body.scrollTop || document.documentElement.scrollTop;
          var height = document.documentElement.scrollHeight - document.documentElement.clientHeight;
          var scrolled = 100; // Default value: fill width
      
          // Only if document is scrollable
          if (height > 0) {
              scrolled = (winScroll / height) * 100;
          }
          document.getElementById("myBar").style.width = scrolled + "%";
      }
      

      【讨论】:

        【解决方案3】:

        试试这个:

        .progress-container {
                width: 100%;
                height: 8px;
                background: #ccc;
                position: fixed;
                top: 0;
                z-index: 1000;
            }
            
            .progress-bar {
                height: 8px;
                background: #4caf50;
                width: 0%;
            }
            <div class="fixedBar">
                <div class="header">
                    <div class="progress-container">
                        <div class="progress-bar" id="myBar"></div>
                    </div>
                </div>
            </div>
            
            
            <script>
        
                 window.onload = function () {
                     if (document.documentElement.scrollHeight === document.documentElement.clientHeight){
                         document.getElementById("myBar").style.width = "100%";
                     }
                 };
        
                // When the user scrolls the page, execute myFunction
                window.onscroll = function () {
                    myFunction()
                };
            
                function myFunction() {
                    var winScroll = document.body.scrollTop || document.documentElement.scrollTop;
                    var height = document.documentElement.scrollHeight - document.documentElement.clientHeight;
                    var scrolled = (winScroll / height) * 100;
                    document.getElementById("myBar").style.width = scrolled + "%";
                }
            </script>

        【讨论】:

          【解决方案4】:

          你不能除以零 试试这个

          function myFunction() {
                      var winScroll = document.body.scrollTop || document.documentElement.scrollTop;
                      var height = document.documentElement.scrollHeight - document.documentElement.clientHeight;
                      var scrolled = height !== 0 ? (winScroll / height) * 100 : 0;
                      document.getElementById("myBar").style.width = scrolled + "%";
                  } 

          【讨论】:

            【解决方案5】:

            您遇到的问题是由于缺少对文档高度和客户端窗口高度的检查。哟可以这样解决:

                let heightClient = window.innerHeight;
                let body = document.body,
                    html = document.documentElement;
            
                let heightDocument = Math.max( body.scrollHeight, body.offsetHeight,
                    html.clientHeight, html.scrollHeight, html.offsetHeight );
            
                if(heightClient < heightDocument){
                    window.onscroll = function() {myFunction()};
                }else document.getElementById("myBar").style.width = "100%";
            
                function myFunction() {
                    let winScroll = document.body.scrollTop || document.documentElement.scrollTop;
                    let height = document.documentElement.scrollHeight - document.documentElement.clientHeight;
                    let scrolled = (winScroll / height) * 100;
                    document.getElementById("myBar").style.width = scrolled + "%";
                }
            </script>
            

            【讨论】:

              猜你喜欢
              • 2012-06-13
              • 1970-01-01
              • 2011-01-02
              • 2011-10-17
              • 2016-07-22
              • 2021-06-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多