自定义React应用程序中的光标(附代码示例)

294 阅读2分钟

在这篇文章中,我将向你展示如何用Reactjs创建一个自定义的光标。

拥有一个定制的光标将使你的网站脱颖而出,因为它创造了更好的用户体验,但在我们开始之前,需要有ReactJS的基本知识来贯彻本文的内容。

你的机器上应该已经安装了Nodejs;如果没有,请点击这里在本地设备上下载并安装Nodejs。Nodejs的安装默认带有NPM,我们将用它来安装本教程所需的包。

第1步

让我们首先在终端上运行以下命令来安装React。
npx create-react-app project-name
你可以将上面的 "project-name "替换为你选择的名称。模板生成后,用你选择的文本编辑器打开该文件夹。

第2步

我们将使用framer-motion库来制作动画,所以让我们在终端运行以下命令来安装该库。
npm i framer-motion

第3步

现在我们已经安装了所有的依赖项,我们需要找到一种方法来跟踪鼠标指针的位置并将其存储在useState钩子中:

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

function App() {
  const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 });

  const handleMouseMove = (ev: MouseEvent) => {
    setMousePosition({
      x: ev.clientX,
      y: ev.clientY,
    });
  };
  useEffect(() => {
    window.addEventListener("mousemove", handleMouseMove);
  }, []);


  return (
    <div className="App">
      <h1>Hello world</h1>
    </div>
  );
}

export default App;

第4步

让我们从framer-motion中导入motion,并从motion中渲染一个div元素,然后给div元素添加变量道具。不要忘了给元素添加className,以便进行样式设计。你也可以参考下面的代码:

import React, { useEffect, useState } from "react";
import { motion, Variants } from "framer-motion";
function App() {
  const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 });

  const handleMouseMove = (ev: MouseEvent) => {
    setMousePosition({
      x: ev.clientX,
      y: ev.clientY,
    });
  };
  useEffect(() => {
    window.addEventListener("mousemove", handleMouseMove);
  }, []);

  const variants: Variants = {
    default: {
      x: mousePosition.x,
      y: mousePosition.y,
    },
  };

  return (
    <div className="App">
      <motion.div className="cursor" variants={variants} animate="default" />
    </div>
  );
}

第5步

在这最后一步,让我们为光标设计样式。请注意,样式设计取决于你的选择:

.cursor {
  width: 50px;
  height: 50px;
  background-color: red;
  border-radius: 50%;
  pointer-events: none;
}

现在我们已经来到了本文的结尾,我希望你觉得这篇文章对你有帮助。如果是这样,请与更多人分享这篇文章。你可以在github上找到源代码。