jQ中鼠标滚轮事件事件吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jQ中鼠标滚轮事件事件吗相关的知识,希望对你有一定的参考价值。

jQuery 不直接支持鼠标滑轮事件,有一个插件叫做 jQuery Mousewheel,你可以 Google 一下


但用原生 javascript 也可以轻松来实现


<script type="text/javascript">
// 鼠标滑轮滚动后执行的函数
// delta > 0 = 向上滚动
// delta < 0 = 向下滚动
function mousewheelEvent(e, delta)
    document.getElementById("debug").innerhtml += (delta + "<br />");
    // 其它代码...

            
if (document.attachEvent)
    document.attachEvent("onmousewheel", function(e)
        mousewheelEvent(e, e.wheelDelta);
    );

else if (document.addEventListener)
    document.addEventListener("DOMMouseScroll", function(e)
        mousewheelEvent(e, e.detail * -40);
    , false);

</script>


<body style="height: 3000px">
<div id="debug" style="position: fixed"></div>

参考技术A

jquery插件默认是不支持鼠标中轮滚轮事件的。jQuery Mousewheel Plugin,用于添加跨浏览器的鼠标滚轮支持。mousewheel事件的处理函数有一点小小的变化,它除了第一个参数event 外,还接收到第二个参数delta。通过参数delta可以获取鼠标滚轮的方向和速度。如果delta的值是负的即-1,那么滚轮就是向下滚动,正的1就是向上。

1.下载jquery-mousewheel插件。

2,复制代码: $('body').mousewheel(function(event, delta)        var dir = delta > 0 ? 'Up' : 'Down';        if (dir == 'Up')

console.log('向上滚动');
else
console.log('向下滚动');
       return false;

);

参考技术B javascript中有鼠标滚轮事件,mousewheel,除了火狐不支持,其余的浏览器都支持,火狐使用的是DOMMouseScroll 参考技术C 亲测可用,来源:
http://www.jb51.net/article/50677.htm

<label for="wheelDelta">滚动值:</label>(IE/Opera)<input type="text" id="wheelDelta"/>
<label for="detail">滚动值:(Firefox)</label><input type="text" id="detail"/>

<script type="text/javascript"> 
var scrollFunc=function(e) 
    e=e || window.event; 
    var t1=document.getElementById("wheelDelta"); 
    var t2=document.getElementById("detail"); 
    if(e.wheelDelta)//IE/Opera/Chrome 
        t1.value=e.wheelDelta; 
    else if(e.detail)//Firefox 
        t2.value=e.detail; 
     
 
/*注册事件*/ 
if(document.addEventListener) 
    document.addEventListener('DOMMouseScroll',scrollFunc,false); 
//W3C 
window.onmousewheel=document.onmousewheel=scrollFunc;//IE/Opera/Chrome 
</script>

参考技术D 没有吧,手册里都没找到这个呢

SVG 阻止触摸/鼠标滚轮事件

【中文标题】SVG 阻止触摸/鼠标滚轮事件【英文标题】:SVG Blocks Touch/Mousewheel events 【发布时间】:2013-05-04 13:59:49 【问题描述】:

有解决方法吗?我正在运行我自己的自定义滚动条脚本,而不是使用内置的浏览器功能。出于多种原因,我更喜欢将 SVG 用于我的图像元素,但其中一个非常重要的缺陷是触摸或鼠标滑过 svg 会阻止事件,从而使页面滚动停止。这在 svg 可能占据整个文档宽度的移动浏览器上更为明显,在这种情况下,一旦您到达 SVG 元素,用户就无法滚动过去。

我没有在 IE 中测试过,但是在 Chrome 中,触摸命令在 SVG 上不起作用,而在 Firefox 上,鼠标滚轮事件是个问题。我想它都会在 IE 上哈哈。

一个不错的解决方案是以某种方式向我的 SVG 元素添加一个事件,以捕获这些事件并将它们传递给滚动事件。我似乎找不到方法。一个更好的解决方案是以某种方式将文档放在 SVG 上方,这样 SVG 就不会干扰滚动。再次,似乎找不到方法。

我将我的 SVG 元素嵌入到对象标签中,出于各种原因,这很重要。我假设对象标签实际上是罪魁祸首。

【问题讨论】:

这是一种奇怪的行为,SVG 中是否嵌入了任何 javascript?将object pointer-events: none; 添加到您的 CSS 中应该可以解决 Firefox 和 Chrome(但不是 IE)中的问题。 【参考方案1】:

根据 Duopixel 的评论。添加:

object 
    pointer-events: none;

到 css 确实解决了 Firefox 和 Chrome 中的问题。我仍然需要在 IE 中进行测试,但目前这似乎是最好和最简单的解决方案。

解释指针事件属性的好文章可以在http://davidwalsh.name/pointer-events找到

如果上述问题是 IE 中的问题,您可以使用需要捕获指针位置并将其传递给适当元素的 javascript 解决方案。可以在此处找到使用 jQuery 但可以很容易地转换为 vanilla javascript 的工作版本:http://jsbin.com/uhuto/1/edit

【讨论】:

加一个用于发布一个好问题并发布一个更好的答案。

以上是关于jQ中鼠标滚轮事件事件吗的主要内容,如果未能解决你的问题,请参考以下文章

jQuery中有鼠标滚轮事件么?

vb如何监视鼠标滚轮事件

如何在 Angular 2 / 4 中使用鼠标滚轮事件测试指令

js中如何禁用鼠标滚轮事件?急,在线等!

JS如何判断鼠标滚轮事件分析

如何使用鼠标滚轮事件移动剖面