我有以下结构:
<body>
<div id="first-div">
<div id="second-div"></div>
<div id="third-div"></div>
</div>
</body>
#first-div {
height: 100%;
}
#second-div, #third-div {
display: none;
}
在检测到第一个向下滚动事件时,我需要显示#second-div,如果检测到第二个向下滚动事件,我需要显示#third-div并隐藏#second-div。我的问题是:在触摸板上单击向下滚动可能会触发多个事件,从而立即显示#second-div和#third-div。
$(body).on('DOMMouseScroll mousewheel', function (event) {
if (event.originalEvent.detail > 0 || event.originalEvent.wheelDelta < 0) {
//scroll down
console.log('Down');
} else {
//scroll up
console.log('Up');
}
//prevent page fom scrolling
return false;
});
如何检测向下滚动事件,停止滚动事件并显示#second-div。然后检测另一个向下滚动事件,停止滚动事件并隐藏#second-div并显示#third-div?
此外,之后,我检测到向上滚动事件,停止滚动事件并隐藏#third-div并显示#second-div。然后检测另一个向上滚动事件,停止滚动事件并隐藏#second-div?
谢谢。
答案 0 :(得分:0)
此代码段使用JQuery的scroll方法 (还有一个类似的问题:Differentiate between scroll up/down in jquery?)
$(window).scroll(function(e) {
var target = e.currentTarget,
$self = $(target),
scrollTop = window.pageYOffset || target.scrollTop,
lastScrollTop = $self.data("lastScrollTop") || 0,
scrollHeight = target.scrollHeight || document.body.scrollHeight,
scrollText = "";
if (scrollTop > lastScrollTop) {
scrollText = "<b>scroll down</b>";
} else {
scrollText = "<b>scroll up</b>";
}
$(".test").html(scrollText +
"<br>innerHeight: " + $self.innerHeight() +
"<br>scrollHeight: " + scrollHeight +
"<br>scrollTop: " + scrollTop +
"<br>lastScrollTop: " + lastScrollTop +
"<br>" + scrollText);
if (scrollHeight - scrollTop === $self.innerHeight()) {
console.log("► End of " + scrollText);
}
//saves the current scrollTop
$self.data("lastScrollTop", scrollTop);
});
&#13;
#first-div {
height: 100%;
}
#second-div,
#third-div {
display: none;
}
.test {
margin: 200px auto 200px auto;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="first-div">
<div class="test">
scroll info</div>
</div>
<div id="second-div">
<div class="test"></div>
</div>
<div id="third-div">
<div class="test"></div>
</div>
&#13;
答案 1 :(得分:0)
我建议您使用fullPage.js来节省时间,可以获得更好的结果。 不要重新发明轮子。
它是目前这类网站最常用的插件。 适用于现代和旧浏览器,触摸设备,并且对Apple笔记本电脑中的动态滚动有很好的响应。 它处理URL哈希,返回链接(锚链接),调整大小......
大量可配置的选项,方法和回调。
如果你使用fullPage.js,你只需要7Kb gzip就可以获得所有这些。