GSAP可视化时间轴动作编辑器导出json webm及mp4视频代码

代码语言:html

所属分类:动画

代码描述:GSAP可视化时间轴动作编辑器导出json webm及mp4视频代码,支持gsap动画的json导出与加载,支持动画转成webm视频,支持视频转为mp4并下载本地。

代码标签: GSAP 可视化 时间轴 动作 编辑器 导出 json webm mp4 视频 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>GSAP 时间轴编辑器 + JSON 导入导出 + 录制为 MP4(MediaBunny)</title>
<link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/all.6.5.1.css">
<style>
  :root{
    --bg:#0f172a;
    --card:#111827;
    --muted:#94a3b8;
    --text:#e5e7eb;
    --primary:#6366f1;
    --primary-2:#4f46e5;
    --success:#10b981;
    --danger:#ef4444;
    --border:#334155;
  }
  *{box-sizing:border-box}
  body{
    margin:0; padding:16px;
    background:linear-gradient(180deg,#0b1220,#0a0f1c 25%,#0a0f1c);
    color:var(--text); font:14px/1.4 system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial;
  }
  h1{margin:0 0 4px;font-size:22px}
  .sub{color:var(--muted);margin:0 0 16px}
  .layout{
    display:grid; grid-template-columns: 1.25fr 1fr; gap:16px;
  }
  .card{
    background:var(--card); border:1px solid var(--border);
    border-radius:12px; padding:12px;
  }
  .row{display:flex; gap:8px; flex-wrap:wrap; align-items:center}
  .row > *{margin:4px 0}
  label{color:var(--muted); font-size:12px}
  input, select, textarea{
    background:#0b1220; color:var(--text);
    border:1px solid var(--border); border-radius:8px;
    padding:8px 10px; outline:none; width:100%;
  }
  input[type="color"]{padding:0; height:36px}
  input[type="range"]{width:100%}
  button,.btn{
    background:var(--primary); border:0; color:#fff; padding:8px 12px;
    border-radius:10px; cursor:pointer; font-weight:600;
  }
  button:hover,.btn:hover{background:var(--primary-2)}
  .btn-danger{background:var(--danger)}
  .btn-success{background:var(--success)}
  .grid-2{display:grid; grid-template-columns:1fr 1fr; gap:10px}
  .grid-3{display:grid; grid-template-columns:repeat(3,1fr); gap:10px}
  .grid-4{display:grid; grid-template-columns:repeat(4,1fr); gap:10px}
  .title{font-weight:700; margin:6px 0 10px}
  .muted{color:var(--muted)}
  .hr{height:1px;background:var(--border);margin:10px 0}
  .list{max-height:240px; overflow:auto; border:1px dashed var(--border); border-radius:8px; padding:6px}
  .list-item{
    display:flex; align-items:center; justify-content:space-between;
    padding:6px 8px; border:1px solid var(--border); border-radius:8px; margin-bottom:6px;
    background:#0b1220;
  }
  .list-item.active{outline:2px solid var(--primary)}
  canvas{width:100%; background:#000; border-radius:10px}
  small{font-size:12px}
  .toolbar{display:flex; gap:8px; align-items:center; flex-wrap:wrap}
  .time{min-width:120px; text-align:right}
  .progress{
    height:10px; width:100%; background:#1f2937; border-radius:999px; overflow:hidden;
    border:1px solid var(--border);
  }
  .bar{height:100%; width:0; background:linear-gradient(90deg,#4f46e5,#8b5cf6)}
  .kv{display:flex; align-items:center; gap:6px}
  .pill{
    background:#0b1220; border:1px solid var(--border); border-radius:999px; padding:6px 10px; color:var(--muted);
  }
  .warn{color:#fbbf24}
  .mono{font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;}
</style>
</head>
<body>
  <header style="margin-bottom:12px">
    <h1>GSAP 动画编辑器 · JSON · 录制 WebM · 转 MP4</h1>
    <p class="sub">基于 GSAP + Canvas 预览,MediaRecorder 实时录制,MediaBunny 转码 MP4</p>
  </header>

  <div class="layout">
    <!-- 左侧:预览 + 播放控制 + 渲染/转码 -->
    <section class="card">
      <div class="row">
        <div style="flex:1">
          <div class="row">
            <div style="flex:1">
              <label>画布宽度</label>
              <input id="projWidth" type="number" min="128" max="3840" value="854">
            </div>
            <div style="flex:1">
              <label>画布高度</label>
              <input id="projHeight" type="number" min="128" max="2160" value="480">
            </div>
            <div style="flex:1">
              <label>帧率 FPS</label>
              <input id="projFPS" type="number" min="12" max="60" value="30">
            </div>
            <div style="width:120px">
              <label>背景色</label>
              <input id="projBG" type="color" value="#111111">
            </div>
          </div>
        </div>
        <div class="kv">
          <span class="pill"><i class="fa-solid fa-info-circle"></i> 建议时长 ≤ 20s</span>
        </div>
      </div>

      <div class="hr"></div>

      <canvas id="stage" width="854" height="480"></canvas>

      <div style="margin-top:10px">
        <input id="timeSlider" type="range" min="0" max="10" step="0.01" value="0">
        <div class="toolbar" style="margin-top:8px">
          <div class="row">
            <button id="btnPlay"><i class="fa-solid fa-play"></i> 播放</button>
            <button id="btnPause"><i class="fa-solid fa-pause"></i> 暂停</button>
            <button id="btnStop"><i class="fa-solid fa-stop"></i> 停止</button>
            <button id="btnSnapKF" class="btn-success"><i class="fa-solid fa-bolt"></i> 在当前时间添加关键帧</button>
          </div>
          <div class="time">
            <span id="curTime">0.00</span>s / <span id="totalTime">0.00</span>s
          </div>
        </div>
      </div>

      <div class="hr"></div>

      <div class="row">
        <button id="btnRecord"><i class="fa-solid fa-circle-dot"></i> 录制并导出 WebM</button>
        <a id="dlWebm" class="btn" style="display:none" download="animation.webm"><i class="fa-solid fa-download"></i> 下载 WebM</a>
        <button id="btnToMp4"><i class="fa-solid fa-file-video"></i> 转换为 MP4</button>
        <a id="dlMp4" class="btn" style="display:none" download="animation.mp4"><i class="fa-solid fa-download"></i> 下载 MP4</a>
      </div>
      <div style="margin-top:10px">
        <div class="progress"><div id="recBar" class="bar"></div></div>
        <small class="muted">录制进度</small>
      </div>
      <div style="margin-top:10px">
        <div class="progress"><div id="mbBar" class="bar" style="background:linear-gradient(90deg,#06b6d4,#22d3ee)"></div></div>
        &l.........完整代码请登录后点击上方下载按钮下载查看

网友评论0