1仕組みと動作原理
プラグインを第一級の主題として扱い、まず「登録」による前提条件を確立した上で、設定面(trigger/start/end/scrub/pin…)ごとに20項目以上のリファレンステーブルを提示します。
ScrollTrigger is a plugin. After loading the script, register it once:
start/end の文字列構文を「トリガー点 vs ビューポート点」の座標モデルとして解説し、clamp()・相対値・関数の3つの発展形を提示します。
**start** / **end**: viewport position vs. trigger position. Format `"triggerPosition viewportPosition"`.
batch() により、複数の ScrollTrigger と時間枠を組み合わせた集約コールバックを提供し、IntersectionObserver の手書きバッチ処理を代替して、今回のターンでビューポートに入った全要素を一度に渡します。
**ScrollTrigger.batch(triggers, vars)** creates one ScrollTrigger per target and **batches** their callbacks
scrollerProxy() により、サードパーティ製スムーズスクロールライブラリと共存するための接続方法を提示: カスタム getter/setter で scrollTop/scrollLeft をオーバーライドし、ScrollTrigger.update をスクロールリスナーとして登録します。
**Critical:** When the third-party scroller updates its position, ScrollTrigger must be notified.
「疑似横スクロール」パターンを4ステップの定石レシピに分解し、ease: "none" を必須制約として明記(設定しない場合、スクロール位置と横方向の位置が同期しなくなります)。
The container animation must use **ease: "none"**.
ライフサイクル管理を前置: refresh の自動/手動の境界 + 作成順序/refreshPriority + kill によるクリーンアップを徹底し、SPA 内で古いノードに残存インスタンスが走り続けるのを防止します。
Create ScrollTriggers in the order they appear on the page (top to bottom, scroll 0 → max).
「scrub と toggleActions は二者択一」であることを排他的仕様として明記し、両方が存在する場合は scrub が優先される旨を明示。問い合わせ調査で最も頻発する混乱を解消します。
❌ Use **scrub** and **toggleActions** together on the same ScrollTrigger; choose one behavior. If both exist, **scrub** wins.
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| package | gsap/ScrollTrigger(插件,须 registerPlugin) |
| network | GSAP 官方 ScrollTrigger 文档 |
| network | batch() 官方文档 |
| network | scrollerProxy() 官方文档 |
4推奨統制措置と判定根拠
- SKILL.md: 純粋なプロンプト指示およびルールテキストのみで構成され、スクリプト実行や外部への影響はありません。
5二重目の独立検証
- [ok] 目录资产面:仅 SKILL.md — skills/gsap-scrolltrigger/ 下唯一文件 SKILL.md(18,390 B);无 scripts/、references/、数据文件。
- [ok] external_deps 逐条核实调用点 — registerPlugin(ScrollTrigger) 代码块、三条 gsap.com URL(文档链接、batch()、scrollerProxy())均在文件内逐字命中,无自造端点。
- [ok] 「ease: none 是硬约束」是否有原文支撑 — 原文两处强调:配方第 2 步「Use **ease: "none"** on that tween」与 Caveats「The container animation must use **ease: "none"**.」,并解释原因是 1:1 映射会被缓动破坏。
- [ok] batch 回调签名描述(两参数)是否属实 — 原文明确「Batched callbacks receive **two** parameters (unlike normal ScrollTrigger callbacks, which receive the instance)」,与 GSAP 官方 batch 行为一致。
- [ok] scrollerProxy getter/setter 双态语义描述 — 原文「called **with** an argument, it is a setter; called **with no** argument → getter」并给出 arguments.length 判定的示例代码,符合官方 API。
- [ok] 安全反例搜索(隐藏脚本/网络/凭证) — 对该文件 token 扫描:curl/wget/fetch(/XMLHttpRequest/exec(/child_process/process.env/.env/API_KEY/secret 全零命中;URL 仅 3 条 gsap.com。
- [ok] 与 gsap-performance / gsap-react 的表述是否冲突 — 三者对 scrub、refresh、React 清理的说法一致(performance 提出去抖 refresh、react 提供 useGSAP 自动清理),无自相矛盾。
- [ok] 元数据与 pin — frontmatter license MIT;本地 HEAD = aed9cfd3277740755f6bfc1155c7aa645403b760;GitHub API stars 15326 / pushed_at 2026-07-29T17:36:08Z(晚于 pin,结论不跨版本)。
6結論
d77050ca6e9970e0…