最好只查看 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")
始终返回第二页并始终尝试将页面滚动到第二部分。
发生了什么:
$("section")
返回页面的所有section
元素(第 1、2、3、4 页).next(".page")
返回每个元素的下一页(第 2、3、4 页).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.querySelectorAll
和 addEventListener
。
关于javascript - .next() jQuery 只滚动一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43060271/