본문 바로가기

코딩도 합니다/JS

[자바스크립트 js / 프로젝트6 ] modal / 모달 / 모달 슬라이드 / 모서리에서 아이콘 보여지기



이미지 클릭 시
이미지 리스트 / 이미지 구석에 아이콘 표시

 

 

 

  html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <!-- bootstrap css -->
  <link rel="stylesheet" href="css/bootstrap.min.css">
  <!-- main css -->
  <link rel="stylesheet" href="css/style.css">

  <!-- font awesome -->
  <link rel="stylesheet" href="css/all.css">
  <title>Starter Template</title>
  <style>
  </style>
</head>

<body>


  <!-- store -->
  <section id="store" class="store py-5">
      <!-- store  items-->
      <div class="row" class="store-items" id="store-items">
        <!-- single item -->
        <div class="col-10 col-sm-6 col-lg-4 mx-auto my-3 store-item sweets" data-item="sweets">
          <div class="card ">
            <div class="img-container">
              <img src="img/took1.jpg" class="card-img-top store-img" alt="">
              <span class="store-item-icon">
                <i class="fas fa-heart"></i>
              </span>
            </div>
          </div>
          <!-- end of card-->
        </div>
        <!--end of single store item-->
        <!-- single item -->
        <div class="col-10 col-sm-6 col-lg-4 mx-auto my-3 store-item cupcakes" data-item="cupcakes">
          <div class="card ">
            <div class="img-container">
              <img src="img/took2.jpg" class="card-img-top store-img" alt="">
              <span class="store-item-icon">
                <i class="fas fa-heart"></i>
              </span>
            </div>
          </div>
          <!-- end of card-->
        </div>
        <!--end of single store item-->
        <!-- single item -->
        <div class="col-10 col-sm-6 col-lg-4 mx-auto my-3 store-item cakes" data-item="cakes">
          <div class="card ">
            <div class="img-container">
              <img src="img/took3.jpg" class="card-img-top store-img" alt="">
              <span class="store-item-icon">
                <i class="fas fa-heart"></i>
              </span>
            </div>
          </div>
          <!-- end of card-->
        </div>
        <!--end of single store item-->
  </section>
  <!--end of store items -->


  <!-- modal-container -->
  <div class="container-fluid ">
    <div class="row lightbox-container align-items-center">
      <div class="col-10 col-md-10 mx-auto text-right lightbox-holder">
        <span class="lightbox-close"><i class="fas fa-window-close"></i></span>
        <div class="lightbox-item"></div>
        <span class="lightbox-control btnLeft"><i class="fas fa-caret-left"></i></span>
        <span class="lightbox-control btnRight"><i class="fas fa-caret-right"></i></span>
      </div>

    </div>
  </div>


  <!-- jquery -->
  <script src="./js/jquery-3.3.1.min.js"></script>
  <!-- bootstrap js -->
  <script src="./js/bootstrap.bundle.min.js"></script>
  <!-- script js -->
  <script src="./js/app.js"></script>
</body>

</html>

 

 

 

 

 

  css

@import url("https://fonts.googleapis.com/css?family=Kaushan+Script");

:root {
  --mainPink: #ef7998;
  --mainYellow: rgb(249, 228, 148);
  --mainWhite: #fff;
  --mainBlack: #000;
  --yellowTrans: rgba(249, 228, 148, 0.5);
  --mainGrey: rgb(238, 238, 238);
}

body {
  font-family: "Kaushan Script", cursive;
  background: var(--mainWhite);
  color: var(--mainBlack);
}

/* store items */
.img-container {
  position: relative;
  overflow: hidden;
  cursor: pointer;
}
.store-img {
  transition: all 1s ease-in-out;
}
.img-container:hover .store-img {
  transform: scale(1.2);
}
.store-item-icon {
  position: absolute;
  bottom: 0;
  right: 0;
  padding: 0.75rem;
  background: var(--mainYellow);
  border-top-left-radius: 1rem;
  transition: all 1s ease-in-out;
  transform: translate(100%, 100%);
}
.img-container:hover .store-item-icon {
  transform: translate(0, 0);
}
.store-item-icon:hover {
  color: var(--mainWhite);
}
.store-item-value {
  color: --mainYellow;
}
/*end of  store items */
.search-box {
  background: var(--mainPink);
  color: var(--mainBlack);
}

/* ligthbox */

.lightbox-container {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 999;
  background: rgba(0, 0, 0, 0.6) !important;
  display: none;
}
.show {
  display: block;
}

.lightbox-holder {
  position: relative;
}
.lightbox-item {
  min-height: 80vh;
  background: url("../img/cake-1.jpeg") center/cover fixed no-repeat;
  border-radius: 0.3rem;
}
.lightbox-close {
  color: var(--mainWhite);
  font-size: 3rem;
  transition: all 1s ease-in-out;
  cursor: pointer;
}
.lightbox-close:hover {
  color: var(--mainYellow);
}

.lightbox-control {
  position: absolute;
  font-size: 4rem;
  color: var(--mainWhite);
  transition: all 1s linear;
  cursor: pointer;
}
.lightbox-control:hover {
  color: var(--mainYellow);
}
.btnLeft {
  top: 50%;
  left: 0;
  transform: translateX(-60%);
}
.btnRight {
  top: 50%;
  right: 0;
  transform: translateX(60%);
}

 

 

 

 

 

  js

(function(){
  let storeItems = document.querySelectorAll('.store-item');
  let lightBox = document.querySelector('.lightbox-container');
  let lightBoxItem = document.querySelector('.lightbox-item');
  let images = document.querySelectorAll('.store-img');
  
  
  // 배열 초기 세팅
  let imageList = [];
  // 이미지 카운터 설정
  let imageCounter = 0;



  // forEach문을 사용하여 모든 이미지를 가져오고 배열에 항목으로 푸시한다.
  images.forEach(function(image){
    imageList.push(image.src);
  })
  
  storeItems.forEach(function(item) {
    // 클릭 시 모달
    // css display: none; 에서 display: block; 으로
    item.addEventListener('click', function(e){
    // 클릭한 이미지를 가져오기
    let image = e.target.src;
    lightBoxItem.style.backgroundImage = `url(${image})`;
    lightBox.classList.add('show');
    // 선택한 이미지의 배열 인덱스 번호를 가져오기
    imageCounter = imageList.indexOf(image);
    });
  }); 


  // 좌우 화살표
  // 왼쪽 버튼
  let btnLeft = document.querySelector('.btnLeft');
  btnLeft.addEventListener('click', function(){
    imageCounter--;
    if (imageCounter < 0){
      imageCounter = imageList.length -1;
    }
    lightBoxItem.style.backgroundImage = `url(${imageList[imageCounter]})`
  });
    // 오른쪽 버튼
  let btnRight = document.querySelector('.btnRight');
  btnRight.addEventListener('click', function(){
    imageCounter++;
    if (imageCounter >= imageList.length){
      imageCounter = 0;
    }
    lightBoxItem.style.backgroundImage = `url(${imageList[imageCounter]})`;
  });
  
  // 닫기 버튼
    let lightBoxClose = document.querySelector('.lightbox-close');
    lightBoxClose.addEventListener('click', function(){
    lightBox.classList.remove('show');
    });
  
  
})();

 

 

 

 

 

위 코드는 아래 링크에 있는 자바스크립트 프로젝트를 활용 및 참고하여 작업하였습니다.

https://jsbeginners.com/javascript-projects-for-beginners/#below-list

 

728x90