防止jQuery在触摸设备上运行mouseenter事件

8

我用jQuery写了一些不错的鼠标悬停滚动效果,在桌面电脑上运行良好。但是,我的问题在于在移动设备上,用户通过点击屏幕来操作,导致我的代码仍然认为用户正在悬停在我的.scrollright div上并继续滚动。

我该如何在移动/平板设备上禁用它,或者以其他方式解决这个问题?

$('.thumbnails .scrollright').on('mouseenter', function() {
    this.iid = setInterval(function() {
        var CurrentScrollLeft = $( ".thumbnails .thumbnailphotos" ).scrollLeft();
        $( ".thumbnails .thumbnailphotos" ).scrollLeft( CurrentScrollLeft+10 );         
    }, 50);
    }).on('mouseleave', function(){
        this.iid && clearInterval(this.iid);
    });
1个回答

14

也许是为了快速检查触摸?

var tap = ("ontouchstart" in document.documentElement);

然后将您的代码放入条件语句中:

if(!tap){
    $('.thumbnails .scrollright').on('mouseenter', function() {
        this.iid = setInterval(function() {
            var CurrentScrollLeft = $( ".thumbnails .thumbnailphotos" ).scrollLeft();
            $( ".thumbnails .thumbnailphotos" ).scrollLeft( CurrentScrollLeft+10 );         
        }, 50);
    }).on('mouseleave', function(){
        this.iid && clearInterval(this.iid);
    });
}

无论如何都是这样。


谢谢,Chris,这在Android上起作用了(至少)。这种方法在iOS和所有其他主要触摸设备上也能起作用吗?我这里只有Android设备可以测试。 - Chris DeMarco
1
嘿,克里斯。没错,应该在所有设备上都能工作。至少在只涉及移动设备时是这样的。但是当你考虑到支持触摸和鼠标事件的设备时,情况可能会变得棘手起来。 if (window.PointerEvent) { // 如果指针对象存在,则执行以下操作 } - chrismauck
1
这对于既有触摸屏又有鼠标的设备是行不通的。例如,触摸屏笔记本电脑。 - Skeets
这不是一个好的答案。1. 可以定义touchstart,尽管没有触摸设备。2. 有带有触摸屏的笔记本电脑。 - Maciej Krawczyk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接