こんにちは朱夏です。
JavaScriptの学習3日目やっていきます。
今回は、前2回の学習からガチャアプリを作ってみたいと思います。
ベースになるのは前回のおみくじアプリになります。
それではやっていきます。
コード
今回も最初にコードを置いておきます。
先ずはHTMLです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<!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ファイルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
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ファイルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
'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回目に学習した内容を合体させたようなものだったので、思ったよりはすんなり完成させる事が出来ました。
この調子で次回も頑張っていきたいと思います。
今回はここまでです。
次回もよろしくお願いします。