jQuery Mousewheel不支持触控板?

我正在使用流行的鼠标滚轮来模拟像这个网站的整页滚动。

jQuery(function() { var top = 0, viewport = jQuery(window).height(), step = jQuery(".home .l-section:first").outerHeight(), body = jQuery.browser.webkit ? jQuery('body') : jQuery('html'), wheel = false; jQuery('body').mousewheel(function(event, delta) { wheel = true; if (delta = jQuery(document).height() ? top : top += step; body.stop().animate({ scrollTop: top }, 400, function() { wheel = false; }); } else { top = top <= 0 ? 0 : top -= step; body.stop().animate({ scrollTop: top }, 400, function() { wheel = false; }); } return false; }); jQuery(window).on('resize', function(e) { viewport = jQuery(window).height(); step = jQuery(".home .l-section:first").outerHeight(); }); jQuery(window).on('scroll', function(e) { if (!wheel) top = jQuery(this).scrollTop(); }); }); 

它工作得很好但不是在使用触控板时。 使用触控板,无论我尝试滚动的速度有多慢,它都会滚动到页面底部。

适用于我的笔记本电脑的触控板。 但是,这是已知问题,你尝试使用去抖动吗?

 function mouseHandle(event) { newDate = new Date(); var scrollAllowed = true; if( wheel < 10 && (newDate.getTime()-oldDate.getTime()) < 100 ) { scrollPos -= event.deltaY*(10-wheel); wheel++; } else { if( (newDate.getTime()-oldDate.getTime()) > 100 ) { wheel = 0; scrollPos -= event.deltaY*60; } else { scrollAllowed = false; } } oldDate = new Date(); if( scrollAllowed ) { // do your stuff here } } //Apply this effect with jQuery On event $('body').on('mousewheel', function(event) { mouseHandle(event); }); 

这已经在这里报道了问题: https : //github.com/brandonaaron/jquery-mousewheel/issues/36

您将在那里获得多种解决方案。 希望有所帮助。 帮助自己:-)

和平,

拉胡尔

我用date()解决了我的问题跟踪问题,因此如果我设置的某个时间不是过去,则用户无法再滚动。

这是我使用’wheel’function的片段

  var last_time = new Date(); $(window).bind('wheel', function(event) { var now = new Date(); if((now - last_time) >= 1200)//Miliseconds { if (event.originalEvent.deltaY <= 0) { //Go up } else { //Go down } last_time = new Date(); } }); 

对于发现这一点的任何人来说,“mousewheel”事件已被弃用。 https://developer.mozilla.org/en-US/docs/Web/Events/wheel

相反,使用“wheel”事件,您可以使用wheel事件上的“originalEvent”属性来获取您期望的属性。 (deltaX,deltaY等……)