如果用户正在滚动,我如何在javascript中检测到?
答案 0 :(得分:67)
这有效:
window.onscroll = function (e) {
// called when the window is scrolled.
}
编辑:
你说这是TimeInterval中的一个函数。
尝试这样做:
userHasScrolled = false;
window.onscroll = function (e)
{
userHasScrolled = true;
}
然后在Interval中插入:
if(userHasScrolled)
{
//do your code here
userHasScrolled = false;
}
答案 1 :(得分:10)
你刚刚在你的标签中说过javascript,所以@Wampie Driessen帖子可以帮助你。
我也想做出贡献,因此如果需要,可以在使用jQuery时使用以下内容。
//Firefox
$('#elem').bind('DOMMouseScroll', function(e){
if(e.detail > 0) {
//scroll down
console.log('Down');
}else {
//scroll up
console.log('Up');
}
//prevent page fom scrolling
return false;
});
//IE, Opera, Safari
$('#elem').bind('mousewheel', function(e){
if(e.wheelDelta< 0) {
//scroll down
console.log('Down');
}else {
//scroll up
console.log('Up');
}
//prevent page fom scrolling
return false;
});
另一个例子:
$(function(){
var _top = $(window).scrollTop();
var _direction;
$(window).scroll(function(){
var _cur_top = $(window).scrollTop();
if(_top < _cur_top)
{
_direction = 'down';
}
else
{
_direction = 'up';
}
_top = _cur_top;
console.log(_direction);
});
});
答案 2 :(得分:2)
window.addEventListener("scroll",function(){
window.lastScrollTime = new Date().getTime()
});
function is_scrolling() {
return window.lastScrollTime && new Date().getTime() < window.lastScrollTime + 500
}
将500更改为您认为用户“不再滚动”的上一个滚动事件之后的毫秒数。
({addEventListener
比onScroll
好,因为前者可以与使用onScroll
的任何其他代码很好地共存。)
答案 3 :(得分:1)
如果您想检测用户何时滚动到某个 div,您可以执行以下操作:
window.onscroll = function() {
var distanceScrolled = document.documentElement.scrollTop;
console.log('Scrolled: ' + distanceScrolled);
}
例如,如果您的 div 在滚动到位置 112 后出现:
window.onscroll = function() {
var distanceScrolled = document.documentElement.scrollTop;
if (distanceScrolled > 112) {
do something...
}
}
但是正如您所看到的,您不需要 div,只需要您希望发生某些事情的偏移距离。
答案 4 :(得分:0)
您可以设置一个时间间隔以继续检查用户是否滚动,然后相应地执行操作。
从John Resig中伟大的his article借来。
示例:
let didScroll = false;
window.onscroll = () => didScroll = true;
setInterval(() => {
if ( didScroll ) {
didScroll = false;
console.log('Someone scrolled me!')
}
}, 250);