前提・実現したいこと
3Dモデルの車に、ドア open / close のアニメーションを実装しています。
リンクからご確認いただけますでしょうか。
ボタンクリックして運転席側のドアをオープン後、助手席側のドアもオープンすると、運転席側が閉まります。
同時にオープン状態にするには、どんなコードにすれば良いでしょうか。
運転席側、助手席側を独立して動かしたいです。
現在は setTimeoutを使用して、アニメーションを制御しています。
プラットフォームは Google model-viewer になります。
コード初心者の為、皆様のお力をお貸しいただけますと幸いです。
発生している問題・エラーメッセージ
左右のドアが独立して動きません。
該当のソースコード
<body>`<figure class="ar-img"><div class="wrapper">
<button class="aka1" id="Button1" animation-name="right_door" slot="hotspot1" onclick="Button1()" data-position="0.05631487185085804m 0.9982469014260928m -0.9695847388351034m" data-normal="-0.07570371106419371m 0.14147896900599324m -0.9870423747033915m" data-visibility-attribute="visible"> <script> document.getElementById("Button1").style.visibility ="visible"; function Button1(){ const Button1 = document.getElementById("Button1"); const Button2 = document.getElementById("Button2"); if(Button1.style.visibility=="visible"){ Button1.style.visibility ="hidden"; }else{ Button1.style.visibility ="visible"; } if(Button2.style.visibility=="hidden"){ Button2.style.visibility ="visible"; }else{ Button2.style.visibility ="hidden"; } } </script> <script> var aka1 = document.getElementById('Button1'); aka1.addEventListener('click', () => { self.setTimeout(() => { modelViewer.animationName = 'right_door'; modelViewer.play(); }, 0); self.setTimeout(() => { modelViewer.animationName = 'right_door'; modelViewer.pause(); }, 1000); })(); </script> </button> <button class="aka2" id="Button2" animation-name="right_door" slot="hotspot2" onclick="Button2()" data-position="0.05631487185085804m 0.9982469014260928m -0.9695847388351034m" data-normal="-0.07570371106419371m 0.14147896900599324m -0.9870423747033915m" data-visibility-attribute="visible"> <script> document.getElementById("Button2").style.visibility ="hidden"; function Button2(){ const Button2 = document.getElementById("Button2"); const Button1 = document.getElementById("Button1"); if(Button2.style.visibility=="visible"){ Button2.style.visibility ="hidden"; }else{ Button2.style.visibility ="visible"; } if(Button1.style.visibility=="hidden"){ Button1.style.visibility ="visible"; }else{ Button1.style.visibility ="hidden"; } } </script> <script> var timeout_id; var aka2 = document.getElementById('Button2'); aka2.addEventListener('click', () => { self.setTimeout(() => { modelViewer.animationName = 'right_door'; modelViewer.play(); }, 0); self.setTimeout(() => { modelViewer.animationName = 'right_door'; modelViewer.pause(); modelViewer.currentTime = 0; }, 1000); })(); </script> </button> <button class="ao1" id="Button3" animation-name="left_door" slot="hotspot6" onclick="Button3()" data-position="0.0726482461420125m 0.9864576348302633m 0.967550878481411m" data-normal="-0.01067212338320389m -0.8848665269268025m 0.4657223800795837m" data-visibility-attribute="visible"> <script> document.getElementById("Button3").style.visibility ="visible"; function Button3(){ const Button3 = document.getElementById("Button3"); const Button4 = document.getElementById("Button4"); if(Button3.style.visibility=="visible"){ Button3.style.visibility ="hidden"; }else{ Button3.style.visibility ="visible"; } if(Button4.style.visibility=="hidden"){ Button4.style.visibility ="visible"; }else{ Button4.style.visibility ="hidden"; } } </script> <script> var ao1 = document.getElementById('Button3'); ao1.addEventListener('click', (e) => { self.setTimeout(() => { modelViewer.animationName = 'left_door'; modelViewer.play(); }, 0); self.setTimeout(() => { modelViewer.animationName = 'left_door'; modelViewer.pause(); }, 1000); })(); </script> </button> <button class="ao2" id="Button4" animation-name="left_door" slot="hotspot7" onclick="Button4()" data-position="0.0726482461420125m 0.9864576348302633m 0.967550878481411m" data-normal="-0.01067212338320389m -0.8848665269268025m 0.4657223800795837m" data-visibility-attribute="visible"> <script> document.getElementById("Button4").style.visibility ="hidden"; function Button4(){ const Button4 = document.getElementById("Button4"); const Button3 = document.getElementById("Button3"); if(Button4.style.visibility=="visible"){ Button4.style.visibility ="hidden"; }else{ Button4.style.visibility ="visible"; } if(Button3.style.visibility=="hidden"){ Button3.style.visibility ="visible"; }else{ Button3.style.visibility ="hidden"; } } </script> <script> var ao2 = document.getElementById('Button4'); ao2.addEventListener('click', (e) => { self.setTimeout(() => { modelViewer.animationName = 'left_door' modelViewer.play(); }, 0); self.setTimeout(() => { modelViewer.animationName = 'left_door' modelViewer.pause(); modelViewer.currentTime = 0; }, 1000); })(); </script> </button><model-viewer id="modelViewer" class="ar-model" src="porsche_v2.glb" animation-name="right_door" animation-name="left_door" camera-orbit="-50deg 85deg 50m" max-camera-orbit="auto 85deg 5m" min-camera-orbit="auto 0deg 5m" camera-target="auto auto auto" field-of-view="45deg" max-field-of-view="45deg" min-field-of-view="45deg" exposure="1.5" shadow-intensity="8.0" shadow-softness="0.2" environment-image="approaching_storm_1k.hdr" camera-controls>
試したこと
イベントの停止等、試しましたが独立して動いてくれません。
色々と100回以上は試しております。。
補足情報(FW/ツールのバージョンなど)
プラットフォームは Google model-viewer になります。
アニメーションはオープンからクローズまで2秒のループです。
アニメーション書き出しは、
right_open / close left_open / close まで1つのタイムラインです。
ボタンクリックは 赤 open / 青 close になります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/18 00:23
2021/09/18 00:37
2021/09/22 04:44
2021/09/22 05:02
2021/09/22 10:46
2021/09/22 13:31
2021/09/22 14:08
2021/09/23 02:58
2021/09/23 03:20
2021/09/23 03:23
2021/09/23 04:21
2021/10/01 06:44
2021/10/01 14:40
2021/10/02 00:11 編集
2021/10/03 01:58
2021/12/21 02:43
2021/12/21 13:38
2021/12/22 02:44
2021/12/22 02:58 編集
2021/12/22 03:01
2021/12/22 03:41
2021/12/22 03:50
2021/12/22 09:28