본문 바로가기
Project/[JS] RummiKub

[RummiKub/JS] 타일 클릭 시 후광 효과

by M개발자 2021. 11. 18.
반응형

결과물


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 배열에 타일의 정보가 잘 들어간 걸 확인할 수 있다.

여러개 선택 시 clickTile에 5개가 들어간 걸 확인할 수 있다.
다시 클릭할 시 clickTile이 비워지고 섀도우가 사라지고 클래스가 사라진걸 확인할 수 있다.

 

다시 한 번 말하자면 아직 js를 배운지 1년도 되지 않았지만 프로젝트를 진행하라 해서 어쩌다보니 루미큐브를 만들게 되었으며 바닐라 js로 라이브러리 없이 만들어야한다는 조건이 있어서... 제이쿼리는 사용하지 않습니다!!

 

다음 글은 타일 등록


My GitHub

Notion

반응형

'Project > [JS] RummiKub' 카테고리의 다른 글

[RummiKub/JS] 타일 나누기  (0) 2021.11.18
[JS] RummiKub 프로젝트  (1) 2021.11.17

댓글