在mousemove上与React创建一个黄色圆圈

发布于 2025-01-31 10:04:28 字数 554 浏览 3 评论 0原文

我正在尝试在Mousemove上与React创建一个圆形光标,但什么也没有发生。 这是我跟踪鼠标运动的组件:

  import React, { useState, useEffect } from "react";

  function Cursor() {
  const [x, setX] = useState(0);
  const [y, setY] = useState(0);

  const logMousePosition = (e) => {
    setX(e.clientX);
    setY(e.clientY);

    e.target.setAttribute("style", "top: " + y + "px; left: " + x + "px;");

  };

  useEffect(() => {

    document.addEventListener("mousemove", logMousePosition);
  }, []);

  return <span></span>;
}

export default Cursor;

I am trying to create a circle cursor on mousemove with react, but nothing is happening.
This is the component where I track the mouse movements:

  import React, { useState, useEffect } from "react";

  function Cursor() {
  const [x, setX] = useState(0);
  const [y, setY] = useState(0);

  const logMousePosition = (e) => {
    setX(e.clientX);
    setY(e.clientY);

    e.target.setAttribute("style", "top: " + y + "px; left: " + x + "px;");

  };

  useEffect(() => {

    document.addEventListener("mousemove", logMousePosition);
  }, []);

  return <span></span>;
}

export default Cursor;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

日裸衫吸 2025-02-07 10:04:28

设置事件处理程序,以使其每次都有更改

import React, { useState, useEffect } from "react";

  function Cursor() {
  const [x, setX] = useState(0);
  const [y, setY] = useState(0);

  const logMousePosition = (e) => {
    setX(e.clientX);
    setY(e.clientY);

    e.target.setAttribute("style", "top: " + y + "px; left: " + x + "px;");

  };

  useEffect(() => {

    return () => { document.addEventListener("mousemove", logMousePosition)
}; }, []);
    
  

return <span></span>;
}

导出默认光标时将其运行。

Set up an event handler to have it re run the function each time there is a change

import React, { useState, useEffect } from "react";

  function Cursor() {
  const [x, setX] = useState(0);
  const [y, setY] = useState(0);

  const logMousePosition = (e) => {
    setX(e.clientX);
    setY(e.clientY);

    e.target.setAttribute("style", "top: " + y + "px; left: " + x + "px;");

  };

  useEffect(() => {

    return () => { document.addEventListener("mousemove", logMousePosition)
}; }, []);
    
  

return <span></span>;
}

export default Cursor;

旧竹 2025-02-07 10:04:28

现在正在工作。我更改了这条线:

e.target.setAttribute("style", "top: " + y + "px; left: " + x + "px;");

进入:

e.target.setAttribute("style", "top: " + e.clientY + "px; left: " + e.clientX + "px;");

我想这是因为现在它在每个渲染上都动态地计算鼠标的位置。
如果有人有更好的解释,我将不胜感激。

It's working now. I changed this line:

e.target.setAttribute("style", "top: " + y + "px; left: " + x + "px;");

into:

e.target.setAttribute("style", "top: " + e.clientY + "px; left: " + e.clientX + "px;");

I guess it's because now it's calculating the position of the mouse dynamically on every render.
If anyone has a better explanation I'd appreciate it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文