从篮子中取出时滑动动画

slide animation on removing from basket

我正在创建一个应用程序,它在单击 'remove from basket' 按钮时删除元素。现在我想用动画来做。我尝试了各种方法,但没有成功。有人可以帮忙添加滑动动画吗

下面是我的代码。

import React from "react";
import "./CheckoutProduct.css";
import { useStateValue } from "./StateProvider";

export default function CheckoutProduct({
  id,
  image,
  title,
  price,
  rating,
  hideButton
}) {
  const [{ basket }, dispatch] = useStateValue();

  const removeFromBasket = () => {
    dispatch({
      type: "REMOVE_FROM_BASKET",
      id: id
    });
  };

  return (
    <div className="checkoutProduct">
      <img className="CheckoutProduct__image" src={image} />
      <div className="CheckoutProduct__info">
        <p className="CheckoutProduct__title">{title}</p>
        <p className="CheckoutProduct__price">
          <small>$</small>
          <strong>{price}</strong>
        </p>
        <div className="CheckoutProduct__rating">
          {Array(rating)
            .fill()
            .map((_, i) => (
              <p></p>
            ))}
        </div>
        {!hideButton && (
          <button onClick={removeFromBasket}>Remove from basket</button>
        )}
      </div>
    </div>
  );
}

从购物篮中删除功能运行良好。

谢谢!

使用Framer-Motion动画库 首先安装 npm install framer-motion

import React from "react";
import "./CheckoutProduct.css";
import { useStateValue } from "./StateProvider";

import { motion } from "framer-motion";
import { AnimateSharedLayout } from "framer-motion";

export default function CheckoutProduct({
  id,
  image,
  title,
  price,
  rating,
  hideButton
}) {
  const [{ basket }, dispatch] = useStateValue();

  const removeFromBasket = () => {
    dispatch({
      type: "REMOVE_FROM_BASKET",
      id: id
    });
  };

  return (
    <AnimateSharedLayout>
      <motion.div layout className="checkoutProduct">
        <img className="CheckoutProduct__image" src={image} />
        <motion.div layout className="CheckoutProduct__info">
          <p className="CheckoutProduct__title">{title}</p>
          <p className="CheckoutProduct__price">
            <small>$</small>
            <strong>{price}</strong>
          </p>
          <div className="CheckoutProduct__rating">
            {Array(rating)
              .fill()
              .map((_, i) => (
                <p></p>
              ))}
          </div>
          {!hideButton && (
            <motion.button onClick={removeFromBasket}>Remove from basket</button>
          )}
        </motion.div>
      </motion.div>
    </AnimateSharedLayout>
  );
}

请分享您的代码,以防它不起作用。

我个人使用 animate.css 干净简单 link 用法非常简单易用。