2
React + MotionEingabefelder

Mengenauswahl

Minus- und Plus-Buttons um eine Zahl, die bei jeder Änderung nach oben oder unten gleitet.

Einstellungen

2
12

Code

import { useState } from "react";
import { AnimatePresence, motion } from "framer-motion";
import { Minus, Plus } from "lucide-react";

interface AnimatedQuantityProps {
  value?: number;
  defaultValue?: number;
  max?: number;
  onChange?: (value: number) => void;
}

export default function AnimatedQuantity({
  value,
  defaultValue = 2,
  max = 12,
  onChange,
}: AnimatedQuantityProps) {
  const [internal, setInternal] = useState(defaultValue);
  const n = value ?? internal;

  const set = (next: number) => {
    if (value === undefined) setInternal(next);
    onChange?.(next);
  };

  return (
    <div className="flex items-center gap-5 rounded-full bg-white p-2 text-[#1d1d1f] shadow-[0_1px_2px_rgba(0,0,0,0.03),0_8px_28px_rgba(0,0,0,0.05)] dark:bg-[#1c1c1e] dark:text-[#f5f5f7]">
      <button
        type="button"
        aria-label="Verringern"
        onClick={() => set(Math.max(0, n - 1))}
        className="grid h-9 w-9 place-items-center rounded-full bg-black/5 dark:bg-white/10"
      >
        <Minus className="h-4 w-4" />
      </button>
      <AnimatePresence mode="popLayout" initial={false}>
        <motion.strong
          key={n}
          initial={{ y: 12, opacity: 0 }}
          animate={{ y: 0, opacity: 1 }}
          exit={{ y: -12, opacity: 0 }}
          className="w-7 text-center"
        >
          {n}
        </motion.strong>
      </AnimatePresence>
      <button
        type="button"
        aria-label="Hinzufügen"
        onClick={() => set(Math.min(max, n + 1))}
        className="grid h-9 w-9 place-items-center rounded-full bg-black/5 dark:bg-white/10"
      >
        <Plus className="h-4 w-4" />
      </button>
    </div>
  );
}

Prompt für KI

Füg ihn in ChatGPT, Claude oder Cursor ein und der Baustein wird mit diesen Einstellungen an dein Projekt angepasst, auch ohne React.

Mehr aus Eingabefelder

Wofür du ihn nutzen kannst

Eine Mengenauswahl taucht überall auf, wo Leute etwas bestellen: im Warenkorb eines Onlineshops, bei Konzerttickets, bei Portionen in einer Liefer-App oder bei Zimmern einer Hotelbuchung. Die gleitende Zahl macht jeden Tap sichtbar, damit niemand aus Versehen drei Flaschen Wein bestellt. Ein Mengen-Stepper klingt unspektakulär, aber kaum ein Element wird im Shop öfter angetippt.

Setz ein sinnvolles Maximum, etwa deinen echten Lagerbestand oder die maximale Ticketzahl pro Bestellung. Standardmäßig hört er bei null auf. Ergibt null keinen Sinn, zum Beispiel in einer Warenkorbzeile, fang lieber bei eins an.