javascript - .next() jQuery 只滚动一次

标签 javascript jquery

最好只查看 fiddle然后尝试点击按钮。

我遇到的问题是第一个按钮使用 jQuery .next() 函数导航到下一部分。但是,它对其余部分不起作用。

var buttons= document.querySelectorAll(".next-section");

for(var i=0; i<buttons.length; i++){
    buttons[i].addEventListener("click", scrollDown);
}   

function scrollDown(){
    console.log("Debug: BUTTON CLICKED")
    $('html, body').animate({
        scrollTop: $("section").next(".page").offset().top 
    }, 'slow');
}

最佳答案

您的事件附件有效并且正在调用 scrollDown 方法。

但是,$("section").next(".page") 始终返回第二页并始终尝试将页面滚动到第二部分。

发生了什么:

  1. $("section") 返回页面的所有 section 元素(第 1、2、3、4 页)
  2. .next(".page") 返回每个元素的下一页(第 2、3、4 页)
  3. .offset().top 返回列表中第一个元素的顶部位置(第 2 页)

相反,您需要获取 当前页面 的下一页 $(this).closest(".page"),并获取其偏移量。
您可以改用以下代码:

$('html, body').animate({
    scrollTop: $(this).closest(".page").next().offset().top 
}, 'slow');

这是工作演示:

var buttons = document.querySelectorAll(".next-section");

for (var i = 0; i < buttons.length; i++) {
  buttons[i].addEventListener("click", scrollDown);
}

function scrollDown() {
  console.log("Debug: BUTTON CLICKED")
  $('html, body').animate({
    scrollTop: $(this).closest(".page").next().offset().top
  }, 'slow');
}
html,
body {
  text-align: center;
  margin: 0;
}

.page {
  height: 100vh;
  width: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
}

.content {
  display: block;
  height: auto;
}

#one {
  background-color: grey;
}

#two {
  background-color: red;
}

#three {
  background-color: blue;
}
<!DOCTYPE html>
<html>

<head>
  <title></title>
  <link rel="stylesheet" type="text/css" href="./css/styles.css">
</head>

<body>

  <section class="page" id="one">
    <div class="content">
      <h1>Page1</h1>
      <p>This is page 1</p>
      <button class="next-section">Next Page!</button>
    </div>
  </section>

  <section class="page" id="two">
    <div class="content">
      <h2>PAGE 2</h2>
      <button class="next-section">Next Page</button>
    </div>
  </section>

  <section class="page" id="three">
    <div class="content">
      <h2>PAGE 3</h2>
      <button class="next-section">Next Page</button>
    </div>
  </section>

  <section class="page" id="four">
    <div class="content">
      <h2>PAGE 4</h2>
      <button class="next-section">Next Page</button>
    </div>
  </section>





  <script type="text/javascript" src="./js/script.js"></script>
  <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
</body>

</html>

一个小的改进建议:不要混合 vanilla JS 事件和 jQuery。
如果您使用 jQuery,则使用 $(".next-section").click(scrollDown) 而不是 document.querySelectorAlladdEventListener

关于javascript - .next() jQuery 只滚动一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43060271/

相关文章:

javascript - Angular:内容显示不正确,但没有报错

javascript - 使用html键盘输入

javascript - 如何使用jquery将.current类添加到父类li

javascript - 如何通过ajax将隐藏字段值传递给codeigniter Controller

javascript - 单击后意外重复 ajax 调用

javascript - 如何在 Hammer.js 2.0 中删除事件监听器并将识别器绑定(bind)到新函数

javascript - 我可以在幽灵博客条目中使用嵌入式 Javascript 吗?

javascript - 有没有更简洁的方法来编写这个更改数组中项目的 reducer 函数?

javascript - 一起比较多个字段值

javascript - HTML5 数据属性在 Safari 中丢失