javascript - 我应该如何将滚轮或滚动事件从一个元素转移到另一个元素?

标签 javascript html css reactjs

我在网站的可滚动区域上有一个绝对定位的元素。单击此元素将向下滚动页面;它供使用隐藏滚动条且不提供良好的触摸板滚动体验的 chromebook 的学生使用。

但是,如果用户(在 Chrome 上)手动滚动,并且光标滑过绝对定位的按钮,页面将完全停止滚动。当光标悬停在按钮上时,我希望页面“正常”滚动。

捕获 wheel 事件然后创建一个新的 wheel 事件并将其分派(dispatch)给可滚动内容是行不通的,我相信是因为 .isTrusted 是 false。

作为解决方法,我正在捕获滚轮事件并在可滚动元素上手动调用 .scrollBy。但是,这不会将页面滚动相同的距离,并且还会导致滚动不流畅、断断续续。

elemScrollImg.addEventListener('wheel', (e) => {
      console.log("Img scroll: ", e)
      let deltaY = e.deltaY
      // Wanted to make a new WheelEvent to pass to the container
      // but isTrusted is false for "fake" events, and the page
      // apparently just ignores them :-/
      // https://stackoverflow.com/a/44462125
      elemContent.scrollBy({
        top: deltaY,
        left: 0,
        // smooth scrolling apparently just makes it all worse,
        // esp. on touchpad scrolling.
        // behavior: 'smooth',
      })

https://jsfiddle.net/seatag/a8m1kw20/58/

是否有推荐的方法来完成此操作?

最佳答案

我最后使用 position: sticky 将按钮放置在可滚动容器内,这允许滚轮事件正常冒泡。这没有回答我的问题,但确实解决了我的问题。

.arrowWrapper {
  position: sticky;
    bottom: 15px;
    padding: 6px;
    padding-bottom: 15px;
    width: 200px;
    margin-left: auto;
    margin-right: auto;
    cursor: pointer;
    background: #f00;
}

https://jsfiddle.net/seatag/yb02c4sa/8/

关于javascript - 我应该如何将滚轮或滚动事件从一个元素转移到另一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57663466/

相关文章:

javascript - 您不能接受使用此 API 的付款,因为印度不再支持它 Next js、Strapi、Stripe

html - CSS让div从各个方面精简

javascript - 是否可以在 Meta 刷新之前运行 JavaScript 代码

javascript - 如何使用模板和 BEM 方法来组织 javascript 表单生成器的架构?

javascript - 为什么我的循环条件无法通过将变量与其自身进行比较来实现?

javascript - 如何使用 css 编写自定义文件输入文本

html - Bootstrap 的 CSS float 问题

html - 为什么 "top: 50%; translateY(-50%);"在同一父项中的某些元素上创建的间隙比应有的要小?

javascript - 赋值中的左手无效?

javascript - 如何在 javascript 中更改特定的 tr bgcolor