【问题标题】:How to differentiate between Scrolling by Mouse and scrolling done by dragging a window's scroll in javascript/jQuery如何区分鼠标滚动和通过在javascript / jQuery中拖动窗口滚动来完成滚动
【发布时间】:2014-06-09 20:57:39
【问题描述】:

我有一个基于滚动实现的功能。 这里是小sn-p ::

$(window).bind('scroll',function(event)
{
  console.log(event.type);
  //Task to do
}

这里我想区分绑定是通过鼠标滚动还是通过拖动滚动完成。 通过检查 event.type 两者都将“滚动”作为事件类型返回给我。

【问题讨论】:

  • 拖动滚动条是什么意思?
  • 拖动是指将鼠标悬停在滚动条上,然后上下移动页面。
  • 可以考虑使用自定义滚动条插件吗?
  • 使用自定义滚动条插件是我心中最后的选择。难道不能使用windows滚动条吗?

标签: javascript jquery scroll


【解决方案1】:

您可以使用wheel DOM event 来检测鼠标滚轮事件:

var isMouseScroll = false;

window.addEventListener('wheel',function(e)
{
  console.log('mouse wheel');
  isMouseScroll = true;
});

window.addEventListener('scroll',function(e)
{
  if(!isMouseScroll) {
    console.log('scroll');
  }

  isMouseScroll = false;
});

JSFiddle

注意 - 不要将 wheel 与已弃用的非标准 mousewheel 事件混淆。

【讨论】:

  • +1 不错的答案 :) (如果不是鼠标滚动,我可能会将 isMouseScroll 设置为 false,但无论哪种方式都可以)
  • 啊,我明白了,对不起,我看错了方向,我的坏^^
  • @joews :您的答案中的一个小改动解决了我的问题。当 'mouseWheel' 事件被触发时,我们需要停止默认的滚动动作。我在wheel的绑定函数中添加了'e.preventDefault()',它对我有用。
  • 这里有一个关于支持wheel事件的说明,看来我们需要IE9+
  • 不过貌似可以先检查wheel是否支持,如果不使用mousewheel,可能是非标准特性,可能是IE最先引入的,IE6,可能从 IE6 - IE8 运行正常。
猜你喜欢
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
相关资源
最近更新 更多