【javascript】サイコロを3Dアニメーションさせる方法

以前にjavascriptでサイコロを作る方法を紹介しました。

しかし、2D表示で、ちょっと味気なかったので、サイコロを振っている間、サイコロをアニメーション表示させようと思います。
サイコロのアニメーション表示
<div class="dice">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
.dice {
position: relative;
width: 100px;
height: 100px;
transform-style: preserve-3d;
animation: rotate-animation 1s linear infinite;
}
.dice .item {
position: absolute;
left: 0;
right: 0;
border: 1px solid #333;
width: 100%;
height: 100%;
}
/* 1 */
.dice .item:nth-child(1) {
transform: translate3d(0, -50px, 0) rotateX(-90deg);
background: url() no-repeat
center center / 100% 100%;
}
/* 2 */
.dice .item:nth-child(2) {
transform: translate3d(0, 0, 50px);
background: url() no-repeat
center center / 100% 100%;
}
/* 3 */
.dice .item:nth-child(3) {
transform: translate3d(50px, 0, 0) rotateY(90deg);
background: url() no-repeat
center center / 100% 100%;
}
/* 4 */
.dice .item:nth-child(4) {
transform: translate3d(-50px, 0, 0) rotateY(-90deg);
background: url() no-repeat
center center / 100% 100%;
}
/* 5 */
.dice .item:nth-child(5) {
transform: translate3d(0, 0, -50px) rotateY(180deg);
background: url() no-repeat
center center / 100% 100%;
}
/* 6 */
.dice .item:nth-child(6) {
transform: translate3d(0, 50px, 0) rotateX(-90deg);
background: url() no-repeat
center center / 100% 100%;
}
@keyframes rotate-animation {
from {
transform: rotate3d(1, 1, 1, 0deg);
}
25% {
transform: rotate3d(1, 1, 1, 90deg);
}
50% {
transform: rotate3d(1, 1, 1, 180deg);
}
75% {
transform: rotate3d(1, 1, 1, 270deg);
}
to {
transform: rotate3d(1, 1, 1, 360deg);
}
}
前回と今回のアニメーションを合わせたバージョン
diceBtn1.addEventListener("click", function(){
if(diceBtn1.textContent=='さいころを振る'){
diceBtn1.textContent = 'ストップ';
dice1.style.display = 'none' // 最初の2Dサイコロ画像を非表示
anidice1.style.display = 'block'; // アニメーション用のサイコロを表示
timerId1 = setInterval( () => { // 隠したサイコロをランダムさせる
let diceIndex1 = Math.floor(Math.random() * diceArry1.length) ;
dice1.src = diceArry1[diceIndex1];
}, 200);
}else{
diceBtn1.textContent = 'さいころを振る';
clearInterval(timerId1); // ランダムを停止
anidice1.style.display = 'none' // アニメーションしていたサイコロを非表示
dice1.style.display = 'block'
}
})
こんな記事も読まれています。
-
【HTML】【CSS】【javascript】電卓の作り方
電卓のソースコードを2つ紹介します。javascriptはわずか数行で書けます。
-
【JacvaScript】【CSS】たった4行のJavaScriptでできるハンバーガーメニューの作り方
たった4行のJavaScriptで作るハンバーガーメニューの作り方について紹介します。✖をつくるには、transform-originがポイントです。
- リンク
-
波紋エフェクトを表現するjqueryのripples-min.jsの使い方
jqueryのripples-min.jsを使うと簡単に水面の波紋を表現できます。波紋の広がりの速度、波紋の大きさ、波紋のブレの値を変えていろいろ表現させると面白いです。
-
【Javascript】querySelectorAllで要素を取得し、クリックしたら、クラスを追加したり、削除したりする方法。
JavascriptのquerySelectorAllで要素を取得し、クリックしたら、クラスを追加したり、削除したりする方法について解説します。querySelectorと同じように書いてしまうとエラーがでます。forEachを使うとすべてに適用できます。
- リンク
-
要素の高さを取得する方法。getBoundingClientRectとは?window.innerHeightとは?window.pageYOffsetとは?
要素の高さを取得する方法について解説します。getBoundingClientRect、window.innerHeight、window.pageYOffsetについて理解し、要素がいつ画面に現れるかを把握できるようにしましょう。
-
Javascriptを使ったページネーションの実装
トップページの記事が増えてきたので、何とかページネーションで最新の記事だけを表示できないかと思っていたら、いい記事を発見しました。カスタマイズして実装することができました。
- リンク
-
【Javascript】マウスの指す(X, Y)座標とドラッグ & ドロップを理解する
マウスの指す(X, Y)座標とドラッグ & ドロップについて解説します。mousedown, mouseover, mousemove, mouseupを使います。
-
【javascript】連想配列をテーブルできれいに表示する方法
javascript(Object.entries)を使って、連想配列の中身をテーブルできれいに表示する方法について紹介します。
- リンク