今回はビンゴカードを作ってみました!
外出自粛ムードなのでなかなか集まってなにかするのが難しい状況ですが、これと前回のbingoを合わせてLINEなどのコミュニケーションツールを使えば、離れた相手ともビンゴができちゃいますよっ!
デモの出てくる数字は1~80の間ですのでお好みにあわせてカスタマイズしてみてくださいね!
少しソースサンプルが長いですがご容赦を!
↓以下が実際のソースサンプルです。
▼html
<body>
<div id="container">
<table>
<tr>
<th>B</th>
<th>I</th>
<th>N</th>
<th>G</th>
<th>O</th>
</tr>
<tr>
<td id="bgcNo0">
<input name="CBox" type="checkbox" id="chuo1" />
<div><label for="chuo1"></label></div>
</td>
<td id="bgcNo1">
<input name="CBox" type="checkbox" id="chuo2" />
<div><label for="chuo2"></label></div>
</td>
<td id="bgcNo2">
<input name="CBox" type="checkbox" id="chuo3" />
<div><label for="chuo3"></label></div>
</td>
<td id="bgcNo3">
<input name="CBox" type="checkbox" id="chuo4" />
<div><label for="chuo4"></label></div>
</td>
<td id="bgcNo4">
<input name="CBox" type="checkbox" id="chuo5" />
<div><label for="chuo5"></label></div>
</td>
</tr>
※長いので省略
<tr>~</tr>の中をコピーして「id="bgcNoを19」まで
「id="chuo20"」まで増やしてくださいね!もしくはデモのソースを参考に!
<tr>
<td id="bgcNo20">
<input name="CBox" type="checkbox" id="chuo21" />
<div><label for="chuo21"></label></div>
</td>
<td id="bgcNo21">
<input name="CBox" type="checkbox" id="chuo22" />
<div><label for="chuo22"></label></div>
</td>
<td id="bgcNo22">
<input name="CBox" type="checkbox" id="chuo23" />
<div><label for="chuo23"></label></div>
</td>
<td id="bgcNo23">
<input name="CBox" type="checkbox" id="chuo24" />
<div><label for="chuo24"></label></div>
</td>
<td id="bgcNo24">
<input name="CBox" type="checkbox" id="chuo25" />
<div><label for="chuo25"></label></div>
</td>
</tr>
</table>
<div id="getNam">
<input id="getNamBtn" type="button" value="番号を変える" />
</div>
<p class="button">
<input id="ChkboxDisabled" type="checkbox" onchange="chkDisabled()" />
<span>カードを決定する</span>
<label for="ChkboxDisabled"></label>
</p>
</div>
</body>
▼css
body {
font-family: Arial, sans-serif;
text-align: center;
}
label, #getNamBtn {
cursor: pointer;
}
/* チェックボックスを見えなくする */
input[type="checkbox"] {
display: none;
}
table {
font-size: 16px;
font-weight: bold;
margin: 0;
height: auto;
width: auto;
}
#container {
margin: 0 auto;
width: 332px;
}
td,
th {
padding: 0;
width: 64px;
height: 64px;
}
td {
background: #f0a262;
color: #fff;
border-radius: 24px;
}
th {
color: #f0a262;
}
/* チェックボックスの次の要素に親と同じ箱を作る */
td > div {
width: 64px;
height: 64px;
line-height: 64px;
}
/* チェックされた時に上記の色を変える */
table input:checked + div {
box-sizing: border-box;
background: #fff;
border: solid #f0a262;
color: #f0a262;
border-radius: 24px;
}
label {
display: block;
vertical-align: middle;
}
#getNam, #getNam + label {
margin-top: 24px;
}
.button {
position: relative;
cursor: pointer;
margin-left: auto;
margin-right: auto;
width: 9rem;
height: 1rem;
font-size: 16px;
padding: 0.3em 1em;
text-decoration: none;
color: #67c5ff;
border: solid 2px #67c5ff;
border-radius: 3px;
}
.button:hover {
background: #67c5ff;
color: white;
}
.button > label {
display: block;
position: absolute;
top:0;
left:0;
width:100%;
height:100%;
}
▼JavaScript
var $ = function (id) {
return document.getElementById(id);
};
var makecol = function (base) {
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
var list = [];
for (var i = 1; i <= 5; i++) {
// 1~16の乱数を生成
var a = parseInt(Math.random() * arr.length);
// listの配列に乱数に引数を足したものを足していく
list.push(arr[a] + base);
// 次の乱数がかぶらないように出た数字を配列から削除
arr.splice(a, 1);
}
return list;
};
var makerow = function () {
//引数+15までの5つの数字の配列を作る
var col_b = makecol(1);
var col_i = makecol(17);
var col_n = makecol(33);
var col_g = makecol(49);
var col_o = makecol(65);
var list = new Array(25);
// できた縦列ををlist(25)の中にはめていく
for (var i = 0; i < 5; i++) {
list[i * 5 + 0] = col_b[i];
list[i * 5 + 1] = col_i[i];
list[i * 5 + 2] = col_n[i];
list[i * 5 + 3] = col_g[i];
list[i * 5 + 4] = col_o[i];
}
list[12] = "FREE"; /* free */
return list;
};
var makeCard = function () {
var row = makerow();
// id=bgcNo(+数字)のところに生成した数字を順番に入れていく
for (var i = 0; i < row.length; i++) {
$("bgcNo" + i).querySelector("label").innerHTML = row[i];
}
};
// ページを表示した時点でカードを一度生成してボタンにもイベントを仕込む
window.onload = function () {
makeCard();
$("getNam").onclick = function () {
makeCard();
for (i = 0; i < document.all.CBox.length; i++) {
document.all.CBox[i].checked = false;
}
};
};
// 番号変更ボタンをロックする
function chkDisabled() {
if ($("ChkboxDisabled").checked == true) {
$("getNamBtn").disabled = true;
$("ChkboxDisabled").nextElementSibling.innerText = "カードを変更する";
} else {
$("getNamBtn").disabled = false;
$("ChkboxDisabled").nextElementSibling.innerText = "カードを決定する";
}
}
今回の記事やデモページ作成にあたり
AOK's JavaScript Sampleのページを参考にさせていただきました。
配列に数字を仕込んでいくあたりに脱帽しました・・・!
