最近项目需要做一个欢迎页,效果差不多就是有点PPT的样子,然后用鼠标滚轮可以控制页面切换。

在实施过程中,遇到的问题就是jquery的 mousewheel 事件触发的机制让人太纠结了。

由于我们一般滚动了 x° 的圆心角才认为是滚动了一次,而计算机在滚动 x° 的过程中,只要有度数的变化,
就会触发一次事件。这个在回调事件的第二个参数即可看出来,第二个参数叫做 delta,即变化量。
也就是说这个变量其实是存储的从开始滚动到当前滚动位置,滚动过的一个类似圆心角的值。

那么我们就需要在这个回调函数里面去做文章,让我们意识中的滚动一次能实现出来。

具体的方法是,加入一个全局变量,来记录每一次的滚动开始,并且每次开始后的一秒内,
不再执行回调函数,直到1秒钟的时候重置这个全局变量。之所以设置一秒是因为我们平时的习惯,
差不多就是1秒钟滚动一次滚轮。代码差不多就是下面的这个样子:

window.is_wheel = false;
$('body').bind('mousewheel', function(event, delta) {
  if(window.is_wheel==true)return;
  window.is_wheel = true;
  setTimeout(function(){
    window.is_wheel = false;
  }, 1000);

  if(delta > 0){
    next_page();
  } else {
    prev_page();
  }
  return false;
});

这样,频繁触发的问题就解决了。另外需要注意的是,如果翻页是个动画效果,那么请把翻页动画效果的时间设置在一秒内,
因为可以保证每次滚动滚轮只执行了一次翻页操作,即翻页动画的回调函数也会按照预期顺序执行。