我有一个div,固定的高度,和卷轴. 但是在这个div中,有一个输入范围.当我触发轮子事件时,div的滚动也会被触发,所以有什么方法可以在我轮子移动的时候阻止这种滚动吗?

这里有一个这样的例子


import { Box } from "@mui/material";
import { useState } from "react";

export default function App() {
  const [volume, setVolume] = useState(0);
  const onwheelVolumne = (e) => {
    if (e.deltaY < 0) {
      setVolume(volume + 10 > 100 ? 100 : volume + 10);
    } else {
      setVolume(volume - 10 < 0 ? 0 : volume - 10);
    }
    return false;
  };
  return (
    <Box
      border="1px solid #ccc"
      padding={2}
      display="flex"
      flexDirection="column"
      height={200}
      overflow="auto"
    >
      <input type="range" value={volume} onWheel={onwheelVolumne} />
      {Array(10)
        .fill(10)
        .map((i, idx) => (
          <p key={idx}>samnple</p>
        ))}
    </Box>
  );
}

Sandbox :https://codesandbox.io/s/modern-sun-lfyhlr?file=/src/App.js:23-738

推荐答案

使用onMouseEnter检测并添加防止滚动的事件

const [mouseEnter, setMouseEnter] = useState(false);

  useEffect(() => {
    if (!mouseEnter) {
      return;
    }
    window.addEventListener("wheel", preventScroll, { passive: false });
    return () => window.removeEventListener("wheel", preventScroll, false);
  }, [mouseEnter]);

  const preventScroll = (e) => {
    if (e.preventDefault) {
      e.preventDefault();
    }
    e.returnValue = false;
  };

  return (
    <Box
      border="1px solid #ccc"
      padding={2}
      display="flex"
      flexDirection="column"
      height={200}
      overflow="auto"
    >
      <input
        type="range"
        value={volume}
        onWheel={onwheelVolumne}
        onMouseEnter={() => setMouseEnter(true)}
        onMouseLeave={() => setMouseEnter(false)}
      />
      {Array(10)
        .fill(10)
        .map((i, idx) => (
          <p key={idx}>samnple</p>
        ))}
    </Box>
  );

Javascript相关问答推荐

判断现代浏览器中的点击是否由touch 触发

为什么剧作家在导航时会超时?

获取POS餐厅会话用户/收银员

Python类实现的JavaScript吊坠是什么样子的?

React Hooks中useState的同步问题

使用AJX发送表单后,$_Post看起来为空

拖放仅通过 Select 上传

网页自检测外部元素无法加载

仅针对RTK查询中的未经授权的错误取消maxRetries

为什么!逗号和空格不会作为输出返回,如果它在参数上?

如何从调整大小/zoom 的SVG路径定义新的d属性?""

数字时钟在JavaScript中不动态更新

虚拟滚动实现使向下滚动可滚动到末尾

保持物品顺序的可变大小物品分配到平衡组的算法

在执行异步导入之前判断模块是否已导入()

单个HTML中的多个HTML文件

使每个<;li>;元素的 colored颜色 与随机生成的 colored颜色 列表不同(不重复

如何为仅有数据可用的点显示X轴标签?

在不扭曲纹理的情况下在顶点着色器中旋转UV

如何根据输入数量正确显示alert ?