Javascript 如何在osx和fire scroll事件中禁用多个滚动效果,每个滚动一次

Javascript 如何在osx和fire scroll事件中禁用多个滚动效果,每个滚动一次,javascript,jquery,macos,mousewheel,Javascript,Jquery,Macos,Mousewheel,我需要像jquery.fullPage那样组织导航:当我滚动一次时,我会移动到下一个部分 我尝试使用jquery.mousewheel来实现它,但在带有触摸板、触控板或APPLE Magic Mouse的MacOS中失败了:它每滚动一次就滚动多张幻灯片 我尝试使用此解决方案: 它在Chrome中工作良好,但在FF中不工作,在Safari中也有bug 这是问题的简单演示: 我在SeaMonkey浏览器中测试了这条语句,但失败了 var delta = e.type == 'mousewheel

我需要像jquery.fullPage那样组织导航:当我滚动一次时,我会移动到下一个部分

我尝试使用jquery.mousewheel来实现它,但在带有触摸板、触控板或APPLE Magic Mouse的MacOS中失败了:它每滚动一次就滚动多张幻灯片

我尝试使用此解决方案:

它在Chrome中工作良好,但在FF中不工作,在Safari中也有bug

这是问题的简单演示:


我在SeaMonkey浏览器中测试了这条语句,但失败了

var delta  = e.type == 'mousewheel' ? e.originalEvent.wheelDelta * -1 : 40 * e.originalEvent.detail;
以防万一,我查看了deltaY,它在一个方向上工作:+1,在另一个方向上工作-1,正如您在其他两个实现中所确定的那样

console.log(e.deltaY); // view console in FireBug
查看Firebug中的事件结构,我可以看到事件类型是“mousewheel”,但我在OriginaleEvent中没有看到wheelData字段

虽然有一个细节字段,但这个字段保持为零

我可以想象,只有当你达到+/-3时,你才会尝试进入下一个项目。我建议做些类似的事情来完成这一壮举:

// somewhere, initialize to zero
var current_position = 0;


// on mousewheel events
current_position += e.deltaY;

// you had a x 40 which would indicate that the limit is about 120 / 40
// if 3 is too small, you can always increase it to 5 or event 10...
if(current_position <= -3)
{
  slider.nextSlide();
  current_position = 0;
}
else if(current_position >= 3)
{
  slider.prevSlide();
  current_position = 0;
}
//在某个地方,初始化为零
无功电流_位置=0;
//关于鼠标滚轮事件
当前位置+=e.deltaY;
//你有一个x 40,这表明极限大约是120/40
//如果3太小,您可以将其增加到5或事件10。。。
如果(当前位置=3)
{
slider.prevSlide();
当前位置=0;
}
否则,您可以验证您的
allowScroll
标志是否按预期工作。我不以这种方式编程对象,所以我不太确定它是否正确。(我使用
prototype
语法,如果您想扩展类,这很有用。)

// somewhere, initialize to zero
var current_position = 0;


// on mousewheel events
current_position += e.deltaY;

// you had a x 40 which would indicate that the limit is about 120 / 40
// if 3 is too small, you can always increase it to 5 or event 10...
if(current_position <= -3)
{
  slider.nextSlide();
  current_position = 0;
}
else if(current_position >= 3)
{
  slider.prevSlide();
  current_position = 0;
}