【问题标题】:Detecting mousewheel with onscroll使用 onscroll 检测鼠标滚轮
【发布时间】:2014-12-05 22:11:53
【问题描述】:

我尝试了几种方法来准确检测mousewheel / DOMMouseScroll 事件,但似乎结果会因浏览器而异,尤其是硬件不同。 (例如:MacBook Magic Trackpad 触发许多鼠标滚轮事件等)

JS 库已经多次尝试“规范化”mousewheel 事件的wheelDelta。但他们中的许多人都失败了(我不再找到相关的 SO 问题,但有些人指出了这个失败)。

这就是为什么我现在尝试没有mousewheel 事件,而是onscroll 事件的解决方案。 Here is an example 使用滚动的隐藏容器(#scroller)和带有正常内容的普通容器(#fixed_container)进行滚动/鼠标滚轮检测。

由于#scroller 的高度有限(此处为 4000 像素),我无法检测到滚动/鼠标滚轮 无限……

如何允许无限滚动事件(通过为#scroller设置无限高度?如何?)?


代码/Live demo:

<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<style>
body { overflow:hidden; }
#scroller { height: 4000px; } 
#fixed_container { position:fixed; top:0px; left:0px; }
#text { position:absolute; top:100px; left:100px; }
</style>

<script type="text/javascript">
window.onscroll = function(e) {
  console.log("scroll event detected! " + window.pageXOffset + " " + window.pageYOffset);
  e.preventDefault();
  return false;
}
</script>
</head>

<body>
<div id="scroller"></div>
<div id="fixed_container">
<div id="text">
Bonjour
</div>
</div>
</body>
</html>

【问题讨论】:

  • @Bhojendra-C-LinkNepal 当然,我已经尝试过DOMMouseScroll,但正如我的问题中提到的,wheelDelta 的结果因浏览器而异很多另一个浏览器,从硬件到另一个硬件......这就是为什么我想尝试别的东西

标签: javascript mouseevent mousewheel


【解决方案1】:

“如何允许无限滚动事件”

应该这样做:

$(window).scroll(function() {
  var st= $(window).scrollTop();
  var wh= $(window).height();
  var sh= $('#scroller').height();

  if(sh < st+wh*2) {
    $('#scroller').css({
      height: st+wh*2
    });
  };
});

在 IE11、Firefox、Chrome、Opera 和 Safari 中测试。

在下面的小提琴中,单击会添加文本,因此您可以看到它滚动:

Fiddle

【讨论】:

  • 伟大的@RickHitchcock !很棒的是它不仅在底部而且在顶部都是无限的(因此PG UP或PG DOWN是无限的)......第二件事,当我们向上滚动时,高度也会降低(即获胜如果不再需要它,就不必在内存中保留 1000000px 高度的 div)...对此有什么想法吗?
  • 这更困难,因为所有子项的 x/y 坐标都需要移动 向下 以模拟滚动向上。我会考虑一下的。
  • 不需要那个@RickHitchcock,因为我的#scroller 是一个隐藏 div,它只对跟踪滚动事件有用:这个div 中没有内容。那么容易吗?
  • 如果内容出现在#scroller 范围内的任何位置,则可能需要移动它以模拟向上滚动。
  • 我不这么认为,看看这个:gget.it/j0azjfa1/scrollDetect.html:#scroller(空且隐藏)正在滚动,但#fixed_container 不受影响,所以没关系。
猜你喜欢
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多