반응형
결과물
CSS
타일 클릭 시 추가할 class의 스타일을 미리 추가합니다.
.tile-click{
border-radius: 10px;
background-color: rgb(255, 181, 43);
box-shadow: 0px 0px 5px 5px rgb(255, 188, 43);
}
JS
1. 선택한 타일의 정보 찾기
타일의 정보를 찾기 위해서는 이전의 코드를 조금 수정해야합니다!
타일을 띄우는 과정에서 타일 고유의 id를 부여하고 그 id를 가진 이미지 태그를 찾는 방식으로 정보를 찾을 예정입니다.
수정 코드 설명
태그에 id 추가 i번째 타일의 id 값으로 추가
onclick onclick 시 함수에 id값을 넘겨줌
show_player_tile() 수정
function show_player_tile(){
for (let i = 0; i < playerTile.length; i++) {
let id = playerTile[i].id;
let path = playerTile[i].path;
// onclick 추가, id 추가
playerBoard.innerHTML += '<img onclick="player_tile_click(' + id + ')" id="' + id + '" src="image/' + path + '.svg" class="tile no-drag">';
}
}
그리고 이미지 클릭 시 해당 아이디를 alert창으로 띄어볼게요
player_tile_click()
function plyaer_tile_click(id) {
alert(id);
}
빨간색 중 첫번째 묶음의 6이라2, 빨간색이라 1, 타일의 숫자 6, 216이 잘 찍힌걸 확인할 수 있습니다.
이제 id 값을 잘 가져왔으니 해당하는 img 태그를 가져와서 class를 추가하겠습니다.
2. 타일 선택 시 class 추가하기
// 타일 선택 시 clickTile 배열에 추가
const clickTile = [];
// 타일 선택 시 섀도우 추가되는 클래스 추가 (중복되는 부분이라 함수로 선언)
function tile_click_shadow(id) {
// getElementById 이용하여 id에 해당하는 img 태그 가져오기
const tile = document.getElementById(id);
// 타일 선택 시 후광 효과, 타일 다시 선택 시 후광 효과 꺼짐을 자유자재로 할 수 있도록 토글!!!
tile.classList.toggle('tile-click');
}
function player_tile_click(id) {
//alert(id);
// playerTile에서 id에 해당하는 인덱스 찾기 (findIndex 사용)
const tilInfo = playerTile.findIndex((e) => {
return e.id == id;
});
//id로 img 태그 찾기
const tile = document.getElementById(id);
// 만약 tile(img태그)에 tile-click이라는 클래스가 없다면 clickTile 배열에 tileInfo에 해당하는 playerTile 추가
if (!tile.classList.contains('tile-click')) {
clickTile.push(playerTile[tilInfo]);
}
// 클래스가 있다면 clickTile에서 id에 해당하는 인덱스를 찾고 clickTile에서 해당 인덱스 삭제
else {
const popTile = clickTile.findIndex((e) => {
return e.id == id;
})
clickTile.splice(popTile, 1);
}
// 있던 없던 토글을 사용했으니 class 추가 및 삭제할 함수로 id 넘김
tile_click_shadow(id);
console.log("tile", tile);
console.log("clickTile", clickTile);
console.log(playerTile[tilInfo]);
}
clickTile 배열에 타일의 정보가 잘 들어간 걸 확인할 수 있다.
다시 한 번 말하자면 아직 js를 배운지 1년도 되지 않았지만 프로젝트를 진행하라 해서 어쩌다보니 루미큐브를 만들게 되었으며 바닐라 js로 라이브러리 없이 만들어야한다는 조건이 있어서... 제이쿼리는 사용하지 않습니다!!
다음 글은 타일 등록
반응형
'Project > [JS] RummiKub' 카테고리의 다른 글
[RummiKub/JS] 타일 나누기 (0) | 2021.11.18 |
---|---|
[JS] RummiKub 프로젝트 (1) | 2021.11.17 |
댓글