需要热更新VScode for Javascript以使用浏览器窗口属性更新react元素的转换

moiiocjp  于 2023-05-12  发布在  Java
关注(0)|答案(1)|浏览(103)

我有一些教程中的代码来在网页上创建视差效果。教程中没有使用react,但我在我的项目中使用了。代码如下所示:

const parallax_el = document.querySelectorAll(
".parallax"
  ) as NodeListOf<HTMLElement>;
let xValue = 0,
yValue = 0;
window.addEventListener("mousemove", (e) => {
xValue = e.clientX - window.innerWidth / 2;
yValue = e.clientY - window.innerHeight / 2;
  });
parallax_el.forEach(
    (item) =>
      (item.style.transform = \translateX(${-xValue}px) translateY(${-yValue}px)`) );`

正如标题所暗示的那样,className中具有视差的图像不会更新它们的位置,除非我在vscode中按Ctrl+S,然后它会根据我的光标在浏览器窗口中的位置进行对齐。
起初我以为react.useEffect是我试图更新DOM时所缺少的,但在更新代码时:

React.useEffect(() => {
const parallax_el = document.querySelectorAll(
".parallax"
    ) as NodeListOf<HTMLElement>;
let xValue = 0,
yValue = 0;
window.addEventListener("mousemove", (e) => {
xValue = e.clientX - window.innerWidth / 2;
yValue = e.clientY - window.innerHeight / 2;
    });
return () => {
parallax_el.forEach(
        (item) =>
          (item.style.transform = \translateX(${-xValue}px) translateY(${-yValue}px)`)     );   }; }, []);`

同样的行为正在发生。在控制台中没有错误,我尝试控制台记录xValue和yValue,如果console.log在转换之前,它会发生,但如果我把它放在转换之后,它就会停止显示,我不知道是什么原因导致JavaScript方面的事情。

jhdbpxl9

jhdbpxl91#

我错误地使用了React.useEffect,因为我传入了一个空数组作为第二个参数,我只在第一帧渲染,但我想在鼠标移动时重新渲染xValue和yValue的变化。我不得不在第二个参数中向数组添加xValue和yValue,它工作了。

相关问题