こんにちは朱夏です。
JavaScriptの学習3日目やっていきます。
今回は、前2回の学習からガチャアプリを作ってみたいと思います。
ベースになるのは前回のおみくじアプリになります。
それではやっていきます。
コード
今回も最初にコードを置いておきます。
先ずはHTMLです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ガチャ</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<!----- ヘッダー ----->
<header>ガチャ</header>
<!----- ヘッダー END ----->
<!----- メインコンテンツ ----->
<div id="btn">クリック!</div>
<h2>排出結果</h2>
<div id="inbox"></div>
<!----- メインコンテンツ END ----->
<!----- フッター ----->
<footer>
<p class="">(c)test.com</p>
</footer>
<!----- フッター END ----->
<script src="js/sample.js"></script>
</body>
</html>
次にCSSファイルです。
body {
background: grey;
}
#btn {
width: 200px;
height: 200px;
background: red;
border-radius: 50%;
margin: 30px;
text-align: center;
line-height: 200px;
color: white;
font-weight: bold;
font-size: 30px;
cursor: pointer;
box-shadow: 0 10px 0 #b34139;
user-select: none;
}
#btn:hover {
opacity: 0.9;
}
#btn:active {
box-shadow: 0 5px 0 #b34139;
margin-top: 35px;
margin-bottom: 25px;
}
.ssr {
background-color: yellow;
margin: 10px;
width: 50px;
height: 50px;
border-radius: 10%;
text-align: center;
line-height: 50px;
color: #cfcfcf;
font-size: 25px;
user-select: none;
animation: ssr-anime 0.3s ease-in;
}
@keyframes ssr-anime {
0% {
transform: rotate(0) scale(0);
opacity: 0;
}
100% {
transform: rotate(360deg) scale(1);
opacity: 1;
}
}
.sr {
background-color: #cfcfcf;
margin: 10px;
width: 50px;
height: 50px;
border-radius: 10%;
text-align: center;
line-height: 50px;
color: white;
font-size: 25px;
user-select: none;
animation: sr-anime 0.2s ease-in;
}
@keyframes sr-anime {
0% {
transform: scale(0);
opacity: 0;
}
100% {
transform: scale(1);
opacity: 1;
}
}
.rare {
background-color: brown;
margin: 10px;
width: 50px;
height: 50px;
border-radius: 10%;
text-align: center;
line-height: 50px;
color: white;
font-size: 25px;
user-select: none;
animation: r-anime 0.2s ease-in;
}
@keyframes r-anime {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
#inbox {
display: flex;
flex-wrap: wrap;
}
最後にJavaScriptファイルです。
'use strict'
{
const btn = document.getElementById('btn')
btn.addEventListener('click', () => {
const n = Math.random();
const gacha = document.createElement('div')
if (n < 0.05) {
btn.textContent = 'SSR';
gacha.textContent = "SSR";
gacha.classList.add('ssr');
} else if (n < 0.2){
btn.textContent = 'SR';
gacha.textContent = "SR";
gacha.classList.add('sr');
} else {
btn.textContent = 'R';
gacha.textContent = "R";
gacha.classList.add('rare');
}
document.getElementById('inbox').appendChild(gacha);
})
}
解説
今回のガチャアプリは、おみくじの発展形として、以下2つの実装に挑戦しました。
-
- ガチャ結果の履歴表示
- 結果表示のアニメーション
ガチャ結果の履歴表示
ガチャ結果を表示させるのには、1回目で使用していた”document.createElement(‘div’)”を使用しました。
「divを作成、classを付与、divにテキスト表示」をレアリティごとに作成して、ガチャ結果を追加するコードを書きました。
結果表示のアニメーション
こちらも1回目で学習した内容を応用したものになります。
アニメーションに関してはJavaScriptではなくCSSで実装されています。
今回新たに学習で来たポイントとしては、”@keyframes”についてですね。
こちらのサイトを参考にしながら、レアリティごとに動きを変化させるコードを書きました。
あとがき
今回はガチャアプリと履歴を実装してみました。
1回目と2回目に学習した内容を合体させたようなものだったので、思ったよりはすんなり完成させる事が出来ました。
この調子で次回も頑張っていきたいと思います。
今回はここまでです。
次回もよろしくお願いします。


