dmitrkuzan
@dmitrkuzan

Как анимировать уменьшение высоты через Framer Motion?

У меня есть компонент карточки, которая содержит в себе кнопку "показать больше", при нажатии на которую карточка будет увеличиваться по высоте. Задача анимировать высоту, с помощью Framer Motion, у меня получается анимировать только развертывание, но свертывание карточки никак не могу реализовать. Читал доку, ролики, статьи но ничего не помогает, пытался применить компонент AnimatePresence из Framer Motion, но он у меня не срабатывает или я не понял как он работает.

import { Typography, Image } from "@components/ui";
import { useTranslation } from "@hooks";
import { useState } from "react";
import { motion } from "framer-motion";

export const MentorCard = (props) => {
  const { title, text, profit, imageSrc, alt, className } = props;
  const t = useTranslation();

  //show more
  const [isExpanded, setIsExpanded] = useState(false);

  const toggleExpansion = () => {
    setIsExpanded(!isExpanded);
  };

  return (
    <div className={className}>
      <div className="team__card-info stack column">
        <div className="team__card-image">
          <Image src={imageSrc} width="186" height="227" alt={alt} />
        </div>
        <div className="team__card-profit stack column center">
          <Typography tag="p" className="">
            {t.common.profit}
          </Typography>
          <span>{profit}</span>
        </div>
      </div>
      <motion.div
        animate={{
          height: isExpanded ? "auto" : 0,
        }}
        transition={{ duration: 0.3 }}
        className="team__card-text stack column"
      >
        <Typography tag="h3" className="team__card-title">
          {title}
        </Typography>

        <Typography tag="p" className="team__card-description p">
          {isExpanded ? text : text.slice(0, 500)}
          {text.length > 500 && (
            <button className="team__card-expanded" onClick={toggleExpansion}>
              {isExpanded ? "Свернуть" : "Читать все"}
            </button>
          )}
        </Typography>
      </motion.div>
    </div>
  );
};
  • Вопрос задан
  • 208 просмотров
Пригласить эксперта
Ответы на вопрос 1
godsplane
@godsplane
<motion.div
   style={{
         height: expanded ? 'auto' : 0,
   }}
  >
</motion.div>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
24 нояб. 2024, в 18:08
1000 руб./за проект
24 нояб. 2024, в 17:52
3000 руб./за проект
24 нояб. 2024, в 16:14
1000 руб./за проект