Remotion LabRemotion Lab
返回模板庫

老虎機字卡

每個字母像老虎機滾輪一樣從上往下捲動,依序停在最終字元上。

文字華麗橫式
提示詞(可直接修改內容)
import {
  AbsoluteFill,
  interpolate,
  spring,
  useCurrentFrame,
  useVideoConfig,
} from "remotion";
import React from "react";

const FINAL-TEXT = "REWIND";
const REEL-PREFIXES = [
  ["K", "A", "M", "X"],
  ["B", "Z", "T", "E"],
  ["Q", "P", "V", "W"],
  ["Y", "N", "D", "I"],
  ["J", "H", "S", "N"],
  ["C", "L", "F", "G"],
];
const REELS = REEL-PREFIXES.map((prefix, i) => [...prefix, FINAL-TEXT[i]]);
const ITEM-HEIGHT = 110;
const CHAR-DELAY = 8;

export const SlotReelTitle: React.FC = () => {
  const frame = useCurrentFrame();
  const { fps } = useVideoConfig();

  return (
    <AbsoluteFill
      style={{
        background: "#1a1a2e",
        justifyContent: "center",
        alignItems: "center",
      }}
    >
      <div style={{ display: "flex", gap: 6 }}>
        {FINAL-TEXT.split("").map((_, charIdx) => {
          const reel = REELS[charIdx];
          const delay = charIdx * CHAR-DELAY;
          const progress = spring({
            frame: frame - delay,
            fps,
            config: { damping: 25, stiffness: 70, mass: 1.2 },
          });
          const translateY = interpolate(
            progress,
            [0, 1],
            [0, -(reel.length - 1) * ITEM-HEIGHT]
          );

          return (
            <div
              key={charIdx}
              style={{ width: 85, height: ITEM-HEIGHT, overflow: "hidden" }}
            >
              <div style={{ transform: `translateY(${translateY}px)` }}>
                {reel.map((char, j) => (
                  <div
                    key={j}
                    style={{
                      height: ITEM-HEIGHT,
                      display: "flex",
                      alignItems: "center",
                      justifyContent: "center",
                      fontSize: 96,
                      fontWeight: 900,
                      color:
                        j === reel.length - 1 ? "#fbbf24" : "#374151",
                      fontFamily: "sans-serif",
                    }}
                  >
                    {char}
                  </div>
                ))}
              </div>
            </div>
          );
        })}
      </div>
    </AbsoluteFill>
  );
};

登入後查看完整程式碼