You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Chakra-UI实现变换及动画效果

解决方案

一、framer-motion报错修复

你当前的写法在TSX环境中会被编译器将<、>识别为比较运算符,而非泛型声明,因此触发两个类型错误。
正确定义MotionBox的写法如下:

import { Flex, Container, HStack, Box, BoxProps } from "@chakra-ui/react";
import { motion, HTMLMotionProps } from "framer-motion";

// 合并Chakra BoxProps和framer-motion的动画属性
type MotionBoxProps = BoxProps & HTMLMotionProps<"div">
const MotionBox = motion(Box) as React.FC<MotionBoxProps>

修复后就可以正常使用MotionBox的动画属性了。

二、更轻量的Chakra原生实现方案

你的需求仅为点击放大图片,无需引入framer-motion,用Chakra内置的过渡属性和状态控制即可实现,无额外依赖:

import { useState } from "react";
import { Image } from "@chakra-ui/react";

const DemoComponent = () => {
  // 控制图片放大状态
  const [isZoomed, setIsZoomed] = useState(false);

  return (
    <Image
      src="你的图片资源地址"
      alt="示例图片"
      cursor="pointer"
      onClick={() => setIsZoomed(!isZoomed)}
      // 控制缩放比例
      transform={isZoomed ? "scale(1.2)" : "scale(1)"}
      // 定义过渡动画时长和缓动函数
      transition="transform 0.25s ease-in-out"
      // 可额外添加其他联动动画属性,比如阴影、圆角等
      boxShadow={isZoomed ? "xl" : "none"}
    />
  )
}

这种方案完全满足简单动画需求,代码更简洁,也不会出现类型兼容问题,更适合你的使用场景。

内容的提问来源于stack exchange,提问作者Liiaam93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:15:07