html,css,js

이미지 클릭 후 해당하는 설명 열기

fenec_fox 2024. 4. 16. 21:16

관련된 자료를 찾아보다 두 가지 글을 발견해서 모두 접목시켜보기로 했습니다.

첫 번째 글에선 해당 이미지에 라벨링해서 설명을 불러오는 방법입니다.

아래는 클래스 파일에 라벨링 한 부분입니다.

<ul class="member4"> 
 	<img id="image4" class="memberimage" onclick="getText(event)">
 		<li class="list-group-item">팀원</li>
        <li class="list-group-item">xxx</li>
        <label for="image4">경씨</label> //라벨링
</ul>

아래는 Javascript 구문으로 따로 파일을 만든 후 불러왔습니다.

function getText(event)  {
  const imageId = event.target.id;
  const query = 'label[for="'+ imageId + '"]'
  const text = 
        document.querySelector(query).innerText;

  document.getElementById('result').innerText = text;
}

하지만 해당 라벨링은 이미지가 늘어날 수록 각 이미지에 대해 라벨링을 추가해야 하고 라벨링한 사이에만 설명을 추가할 수 있다는 단점이 있었습니다.

그래서 두 번째 방법을 시도해봤다. 해당 방법은 설명을 모두 작성한 후에 class에 hidden을 추가하여 안보이게 한 후 이미지를 클릭한 id에 대해서만 불러오게 해봤습니다.

<div id = "image4content" class = "hidden arrange">
	<h2>경씨</h2>
	<p>자기소개</p>
</div>

위의 div 안에 내용을 작성하여 CSS 부분에서 다음과 같이 숨겼습니다.

    .hidden {
        display: none;
    }

이후 클릭한 이미지에 대해 ID를 불러와서 hidden 클래스를 지워 화면에 나타나게 했습니다.

function showImageContent(imageId) {
  var contentId = imageId + 'content';
  $('.memberimage').each(function() {
      var contentId = $(this).attr('id') + 'content';
      $('#' + contentId).addClass('hidden');
  });
  $('#' + contentId).removeClass('hidden');
}

이 방법도 결국 설명이 많으면 코드가 길어진다는 점이 있지만 위의 라벨링과 다르게 각각에 대해 라벨링을 안해도 된다는 점때문에 두 번째 방법으로 코딩했습니다.

 

다른 방법이 더 있는지 찾아봐야 겠습니다.