在CTRL + MOUSEWHEEL事件

Ale*_*erd 3 javascript jquery mouseevent keyboard-events jquery-events

我被要求为我们的页面网站实现ctrl + mousewheel事件,以便在用户放大或缩小时更改图像偏移.我发现这个旧答案使用javascript覆盖浏览器CTRL +(WHEEL)SCROLL,我试图做同样的事情.我为实现下载了jQuery Mouse Wheel插件,这是我的代码:

var isCtrl = false;  
       $(document).on('keydown keyup', function(e) {
            if (e.which === 17) {
                isCtrl = e.type === 'keydown' ? true : false;
            }
        }).on('mousewheel', function(e, delta) { // `delta` will be the distance that the page would have scrolled;
            // might be useful for increasing the SVG size, might not
            if (isCtrl) {
                e.preventDefault();
                alert('wheel');
            }
        });
Run Code Online (Sandbox Code Playgroud)

事件可以单独运行,但如果我按住CTRL按钮并转动鼠标,则轮子事件不会触发.有没有人有更好的解决方案,或者我做错了什么?感谢帮助

Tha*_*lie 8

小提琴,为了使它起作用,你必须先在result框中点击才能尝试.

$(window).bind('mousewheel DOMMouseScroll', function(event) 
{
    if(event.ctrlKey == true)
    {
        event.preventDefault();
        if(event.originalEvent.detail > 0) {
             console.log('Down');
         }else {
             console.log('Up');
         }
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 我使用`event.originalEvent.wheelDelta < 0`来检测向上/向下滚动 (2认同)
  • `detail` 对我来说始终为 0,所以我将您的代码更改为使用 `event.originalEvent.deltaY`,它将根据方向赋予值 `-100` 或 `100`。不确定这是否只是我的问题,但如果有人遇到同样的问题,我会在这里发表评论。 (2认同)

div*_*m12 6

要检查ctrl键是否被点击,事件已经提供了一种方法来做到这一点。尝试这个:

.on('mousewheel', function(e) { 
    if (e.ctrlKey) {
        e.preventDefault();
        alert('wheel');
    }
});
Run Code Online (Sandbox Code Playgroud)

这也适用于e.shiftKeye.altKey等我只会侦听scroll事件,并在那里我会检查是否ctrlKey已关闭。