javascript - 检查 'mousewheel' 事件方向并锁定滚动

标签 javascript jquery html css scroll

目前,我的页面顶部有一个光滑的 slider ,它应该更改滚动时的幻灯片,并且在某个点之后它应该返回到正常的滚动行为。

我想做的是最初锁定滚动(是的,我知道改变滚动行为对于用户体验来说是一件可怕的事情,但这是直接来自客户端的强制请求),检查滚动的次数触发了滚动事件,检查它是向上还是向下,然后相应地切换幻灯片。

我的代码目前如下所示:

$('body').on('DOMMouseScroll mousewheel', function(e) {
  var viewportHeight = $(window).height(),
      firstWaypoint = viewportHeight / 2,
      secondWaypoint = viewportHeight,
      thirdWaypoint = 3/2 * viewportHeight,
      unlockPoint = viewportHeight * 2,
      $slider = $('.home-hero__inner__text');

  if (/* Y scroll position < thirdWaypoint lock scroll */) {
    e.preventDefault();
  } else if (/* If Y scroll position < secondWaypoint show first slide */) {
    $slider.slick('slickGoTo', 0);
  } else if (/* If Y scroll position > secondWaypoint show second slide */) {
    $slider.slick('slickGoTo', 1);
  } else if (/* If Y scroll position > thirdWaypoint show third slide */) {
    $slider.slick('slickGoTo', 2);
  } else {
    // Unlock scroll
  }
});

问题是,由于我当前使用 preventDefault() 锁定滚动功能,我无法再检查我的页面 scrollTop() 位置,因为它始终位于顶部,返回 0 值

有没有办法检查正常行为下应该滚动多少像素,以及向上还是向下?因为我需要跟踪假定的滚动位置以触发if 语句的每个步骤。

最佳答案

您可以检查wheelDelta是正数还是负数

$(document).on('DOMMouseScroll mousewheel', function(e) {
    var moved = e.originalEvent.wheelDelta || e.originalEvent.detail * -1 || 0;

    if (moved > 0) {
        // scrolled up
    } else if (moved < 0) {
        // scrolled down
    }

});

FIDDLE

关于javascript - 检查 'mousewheel' 事件方向并锁定滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34498929/

相关文章:

c# - 如何从字符串中获取html元素?

javascript - 不同的 jquery 表结果

python - 一个flask-python脚本如何调用另一个flask-python脚本

javascript - 在 javascript 警报中使用文本框值

javascript - 如何修复 React Native 中的 "Tried to register two views with the same name RNGestureHandlerButton"?

javascript - 如果存在 div,如何插入文本?

html - 如何删除正文周围的边距空间或清除默认的 css 样式

javascript - 使用普通 JavaScript 获取内容的宽度,而不是视口(viewport)

javascript - 如何通过使用classname而不是id搜索来获取domNode?

php - php 中的电子邮件 div 内容