【问题标题】:JS autoscroll tweakingJS 自动滚动调整
【发布时间】:2020-07-17 03:22:41
【问题描述】:

我有这个第 3 方水平自动滚动脚本,它可以滚动数字序列供学生练习计数,并且我已经成功地拼凑了几个改变数字序列的文本链接,这已经突破了我的 JS 能力的极限。我想完成/解决三件事:

  1. 一个基本的问题是,无论滚动发生在哪里,新数字都会被激活,而不会中断滚动,如果它停止了(因为初始滚动事件已经完成),那么就是这样,什么都没有。每当单击这些文本链接之一以更改数字时,我都需要重置并重新激活滚动。这是我需要解决的最重要的事情。

  2. 如您所见,我有两个单独的脚本来适应调用的两个更改。我不明白如何组合这些功能。

  3. 我非常想创建一组调整速度的 +/- 按钮。需要影响的相关代码是主脚本末尾的那个数字 17。

非常感谢,非常感谢!这是代码,它经过简化,基本上运行良好。

<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <style>
        body {
            padding: 40px;
            font-size: 30px;
            line-height: 2em;
        }
        .container {
            width: 150px;
            overflow-x: scroll;
            white-space: nowrap;
            word-spacing: 30px;
        }
    </style>
</head>
    
    <body>
        <div class="container" id="flavoursContainer">
            <div id="the-numbers">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15</div>
        </div>
        <div onclick="myFunction()">Change</div>
        <div onclick="test()">Change again</div>
        
        <script>
    const flavoursContainer = document.getElementById("flavoursContainer")
const flavoursScrollWidth = flavoursContainer.scrollWidth

window.addEventListener("load", () => {
  self.setInterval(() => {
    if (flavoursContainer.scrollLeft !== flavoursScrollWidth) {
      flavoursContainer.scrollTo(flavoursContainer.scrollLeft + 1, 0);
    }
  }, 17);
})
        </script>
        <script>
        function myFunction() {
  document.getElementById("the-numbers").innerHTML = "25 50 75 100 125 150 175 200";                
}
        </script>
        <script>
        function test() {
  document.getElementById("the-numbers").innerHTML = "11 21 31 41 51 61 71 81 91 101";              
}
        </script>
    </body>
</html>

【问题讨论】:

    标签: javascript scroll autoscroll


    【解决方案1】:

    调用函数时只需将 scrollLeft 值重置为 0!

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8" />
        <style>
          body {
            padding: 40px;
            font-size: 30px;
            line-height: 2em;
          }
          .container {
            width: 150px;
            overflow-x: scroll;
            white-space: nowrap;
            word-spacing: 30px;
          }
        </style>
      </head>
    
      <body>
        <div class="container" id="flavoursContainer">
          <div id="the-numbers">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15</div>
        </div>
        <div onclick="myFunction()">Change</div>
        <div onclick="test()">Change again</div>
    
        <script>
          const flavoursContainer = document.getElementById("flavoursContainer");
          const flavoursScrollWidth = flavoursContainer.scrollWidth;
    
          window.addEventListener("load", () => {
            self.setInterval(() => {
              if (flavoursContainer.scrollLeft !== flavoursScrollWidth) {
                flavoursContainer.scrollTo(flavoursContainer.scrollLeft + 1, 0);
              }
            }, 17);
          });
    
          function myFunction() {
            flavoursContainer.scrollLeft = 0;
            document.getElementById("the-numbers").innerHTML =
              "25 50 75 100 125 150 175 200";
          }
    
          function test() {
            flavoursContainer.scrollLeft = 0;
            document.getElementById("the-numbers").innerHTML =
              "11 21 31 41 51 61 71 81 91 101";
          }
        </script>
      </body>
    </html>
    

    另外,如果您想让按钮调整滚动速度,请为滚动速度设置一个变量,并在您单击按钮时调整它的值。

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8" />
        <style>
          body {
            padding: 40px;
            font-size: 30px;
            line-height: 2em;
          }
          .container {
            width: 150px;
            overflow-x: scroll;
            white-space: nowrap;
            word-spacing: 30px;
          }
        </style>
      </head>
    
      <body>
        <div class="container" id="flavoursContainer">
          <div id="the-numbers">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15</div>
        </div>
        <div onclick="myFunction()">Change</div>
        <div onclick="test()">Change again</div>
        <button onclick="decreaseSpeed()">-</button>
        <button onclick="increaseSpeed()">+</button>
    
        <script>
          const flavoursContainer = document.getElementById("flavoursContainer");
          const flavoursScrollWidth = flavoursContainer.scrollWidth;
          let speed = 1;
    
          window.addEventListener("load", () => {
            self.setInterval(() => {
              if (flavoursContainer.scrollLeft !== flavoursScrollWidth) {
                flavoursContainer.scrollTo(flavoursContainer.scrollLeft + speed, 0);
              }
            }, 17);
          });
    
          function myFunction() {
            flavoursContainer.scrollLeft = 0;
            document.getElementById("the-numbers").innerHTML =
              "25 50 75 100 125 150 175 200";
          }
    
          function test() {
            flavoursContainer.scrollLeft = 0;
            document.getElementById("the-numbers").innerHTML =
              "11 21 31 41 51 61 71 81 91 101";
          }
    
          function increaseSpeed() {
            speed++;
          }
          function decreaseSpeed() {
            if (speed > 1) {
              speed--;
            }
          }
        </script>
      </body>
    </html>
    

    【讨论】:

    • 感谢罗伯特,这成功解决了第 1 点和第 2 点。如果有人能够帮助控制速度,将不胜感激。
    • 我的答案中也包含了滚动速度功能。
    • 太棒了,非常感谢。
    • 嗨罗伯特,如果我可以再问一件事,我想知道如何使这个滚动垂直,除了水平。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 2015-04-09
    • 2018-11-27
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多