Result
表題の通りで、3Dモデル(サンプルでは.glbファイル)を、スクロールに同期させて回転させる、というもの。
3Dモデルを動かすにあたり、ARでお馴染みのmodel-vieweを使用する以外はバニラなコードとなっています。
javascript
const trackAnimationProgress = (animation, cb, precision = 5) => { let progress = 0; const updateValue = () => { if (animation && animation.currentTime) { let newProgress = animation.effect.getComputedTiming().progress * 1; if (animation.playState === "finished") newProgress = 1; newProgress = Math.max(0.0, Math.min(1.0, newProgress)).toFixed(precision); if (newProgress != progress) { progress = newProgress; cb(progress); } } requestAnimationFrame(updateValue); }; requestAnimationFrame(updateValue); } const model = document.querySelector("model-viewer"); trackAnimationProgress(model.getAnimations()[0], (progress) => { model.orientation = `0deg 0deg ${progress * -360}deg`; });
回転については、固定したい軸を0degにすればいいので、動かしたい軸は${progress * -360}deg
を指定するなどしてください。
3Dモデルは以下のように呼び出します。
html
<script type="module" src="https://ajax.googleapis.com/ajax/libs/model-viewer/3.1.1/model-viewer.min.js"></script> <model-viewer src="hogehoge.glb"></model-viewer>
下記で詳しく解説されています。
via
Synchronize videos, 3D-models, etc. to Scroll-Driven Animations