Javascript 检测用户是否正在滚动
如何在javascript中检测用户是否正在滚动?此功能:Javascript 检测用户是否正在滚动,javascript,Javascript,如何在javascript中检测用户是否正在滚动?此功能: window.onscroll = function (e) { // called when the window is scrolled. } 编辑: 您说过这是一个时间间隔内的函数。 试着这样做: userHasScrolled = false; window.onscroll = function (e) { userHasScrolled = true; } 然后在间隔内插入以下内容: if(userHa
window.onscroll = function (e) {
// called when the window is scrolled.
}
编辑:
您说过这是一个时间间隔内的函数。试着这样做:
userHasScrolled = false;
window.onscroll = function (e)
{
userHasScrolled = true;
}
然后在间隔内插入以下内容:
if(userHasScrolled)
{
//do your code here
userHasScrolled = false;
}
你刚才在标签中提到了javascript,所以@Wampie Driessen post可以帮助你 我还想做一些贡献,因此如果需要,可以在使用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;
});
//Firefox
$('#elem').bind('DOMMouseScroll',函数(e){
如果(如详细信息>0){
//向下滚动
console.log('Down');
}否则{
//向上滚动
console.log('Up');
}
//防止页面fom滚动
返回false;
});
//歌剧、狩猎
$('#elem').bind('mouseweel',函数(e){
如果(e.车轮增量<0){
//向下滚动
console.log('Down');
}否则{
//向上滚动
console.log('Up');
}
//防止页面fom滚动
返回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);
});
});
$(函数(){
var_top=$(window.scrollTop();
var_方向;
$(窗口)。滚动(函数(){
var_cur_top=$(窗口).scrollTop();
如果(顶部<当前顶部)
{
_方向=‘向下’;
}
其他的
{
_方向=‘向上’;
}
_顶部=_cur_top;
控制台日志(_方向);
});
});
窗口。addEventListener(“滚动”,函数(){
window.lastScrollTime=新日期().getTime()
});
函数为_滚动(){
return window.lastScrollTime&&new Date().getTime()
在最后一次滚动事件之后,将500更改为毫秒数,您认为用户将不再滚动。
(addEventListener
优于onScroll
,因为前者可以与使用onScroll
的任何其他代码很好地共存)使用间隔进行检查
您可以设置一个时间间隔来持续检查用户是否已滚动,然后执行相应的操作
向世界上最伟大的国家借钱
例如:
let didScroll = false;
window.onscroll = () => didScroll = true;
setInterval(() => {
if ( didScroll ) {
didScroll = false;
console.log('Someone scrolled me!')
}
}, 250);
如果您想在用户滚动某些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,只需要希望发生某些事情的偏移距离。不,我想从另一个函数中写入
if(scolling)
。if(window.onscroll)
是否相同?您可以在onscroll
中设置滚动。(注意:不,那不一样)用户从不“滚动”。只有一个滚动动作,没有滚动状态。@user1365010:D'OH!我没想到。你到底想干什么?为什么你需要知道用户是否在滚动?很有趣。我从未“重新启动”过卷轴。想详细说明一下吗?但这是一个setInterval中的函数@用户1365010:什么是?你在说什么?您需要为这个问题添加更多细节。@user1365010这个答案(在其核心)是您所能做的最好的答案。#供参考,当容器滚动时,它似乎不起作用,body.scroll()可以工作,所以我同时添加了这两个选项,jQuery不应该提取出浏览器的差异吗?为什么您有针对不同浏览器的方法?是$('#elem').bind('scroll'
不够好?编辑:没关系,我看到了你的第二个示例。偶尔使用一点本地javascript没有什么问题。你不是说e.originalEvent.wheeldta | e.originalEvent.detail
?警告:这个答案中的wheel事件是不标准和不推荐的。请使用wheel
事件。我还没有测试过它但是根据MDN,大多数浏览器都不支持DOMMouseScroll
window.onscroll = function() {
var distanceScrolled = document.documentElement.scrollTop;
if (distanceScrolled > 112) {
do something...
}
}