在鼠标滚轮滚动期间阻止 Jquery hoverIntent

Prevent Jquery hoverIntent during mouse wheel scrolling

我正在制作一个素材库。我有一页缩略图。当用户将鼠标悬停在缩略图上时,会弹出相应的视频(在 jquery 对话框中)。我注意到,当我使用鼠标滚轮滚动页面时,我的光标经常会快速经过很多图像,并且我会看到一堆视频一个接一个地快速弹出和消失,这是不受欢迎的。所以我添加了一些代码来检测滚动,这解决了这个问题——除了当滚动停止时,如果光标最终停留在其中一张图像上,则不会触发弹出视频。我必须将鼠标移到另一个图像上才能触发弹出窗口。是否有任何我可以添加或更改以触发视频的内容,光标是否应该在滚动结束时落在图库图像上?我正在使用 hoverIntent,但同样适用于标准 jquery 悬停。代码的相关部分是:

var notScrolling = true;

$(window).scroll(function() {
        notScrolling = false;
    clearTimeout($.data(this, 'scrollTimer'));
    $.data(this, 'scrollTimer', setTimeout(function() {
        notScrolling = true;
    }, 250));
});

// When the window is not being scrolled, and the mouse enters a gallery item,
// the corresponding pop-up will open and any other pop-up will be closed:
$.each(galleryAnchorArray, function( index, value ){
        var galleryThis = value;
        var hoverThisAndCloseOthers = function() {
            hoveringId = index;
            if (notScrolling == true) {OpenPopup(); CloseOthers()}};
        $(galleryThis).hoverIntent(hoverThisAndCloseOthers, hovOutDoNothing)
    });

当滚动停在一个图像上时,该图像的悬停事件已经发生并且您的 if (notScrolling == true) 已阻止它,因此您需要做的是 再次触发悬停事件喜欢

$.data(this, 'scrollTimer', setTimeout(function() {
    notScrolling = true;
    //your hover event or function corresponding to that event here
    hoverThisAndCloseOthers();//just an eg. how you use this is up to you
}, 250));

非常感谢shaN的帮助!以下内容现在几乎按照我想要的方式工作,尽管当我在快速滚动后停下来时,我的光标略微高于或低于缩略图,附近缩略图的弹出视频被触发。我完全可以接受,但也许我会玩弄计时器值(毫秒)。

var notScrolling = true;

$.each(galleryAnchorArray, function( index, value ){
        var galleryThis = value;
        var hoverThisAndCloseOthers = function() {
            hoveringId = index;
            if (notScrolling == true) {OpenPopup(); CloseOthers()};
            $(window).scroll(function() {
                notScrolling = false;
                clearTimeout($.data(this, 'scrollTimer'));
                $.data(this, 'scrollTimer', setTimeout(function() {
                    notScrolling = true;
                    OpenPopup();
                    CloseOthers()
                    }, 250));
                });
            };
        $(galleryThis).hoverIntent(hoverThisAndCloseOthers, hovOutDoNothing);
    });