기본 콘텐츠로 건너뛰기

jQuery로 가벼운 '오늘 본 상품' 세로 슬라이더 구현하기 (플러그인 없이 DOM 조작 최적화)

FRONTEND

jQuery로 가벼운 '오늘 본 상품' 세로 슬라이더 구현하기 (플러그인 없이 DOM 조작 최적화)

무거운 라이브러리 없이 jQuery만으로 쇼핑몰 사이드바의 '오늘 본 상품' 영역을 구현하는 방법을 알아봅니다. DOM 조작을 통한 효율적인 세로 롤링 로직과 코드를 소개합니다.

1. 마크업 구조: 시맨틱한 리스트 구성

쇼핑몰 사이드바 UI는 한정된 공간을 효율적으로 사용해야 합니다. div 대신 dldd 태그를 사용하여 데이터 리스트의 시맨틱한 구조를 잡는 것이 좋습니다. 초기 화면에는 기획된 개수(예: 3개)만 노출하고 나머지는 스타일로 숨김 처리합니다.

<div class="todayBg">
  <dl>
    <!-- 위로 이동 버튼 (Prev) -->
    <img src="/images/btn_up.gif" class="prev" alt="위로">

    <!-- 상품 리스트 (초기 3개 노출) -->
    <dd><a href="#"><img src="/img/p1.jpg" alt="상품1"></a></dd>
    <dd><a href="#"><img src="/img/p2.jpg" alt="상품2"></a></dd>
    <dd><a href="#"><img src="/img/p3.jpg" alt="상품3"></a></dd>

    <!-- 숨겨진 상품들 (display: none) -->
    <dd style="display:none;"><a href="#"><img src="/img/p4.jpg" alt="상품4"></a></dd>
    <dd style="display:none;"><a href="#"><img src="/img/p5.jpg" alt="상품5"></a></dd>

    <!-- 아래로 이동 버튼 (Next) -->
    <img src="/images/btn_down.gif" class="next" alt="아래로">
  </dl>
</div>

핵심 포인트: 전체 영역을 .todayBg로 감싸고, 제어 버튼에 .prev, .next 클래스를 할당하여 스크립트 접근성을 높입니다.

2. jQuery 핵심 로직: 무한 롤링 구현

무거운 슬라이더 플러그인 대신, jQuery의 DOM 조작 메서드인 insertBeforeeq를 활용해 가벼운 순환 구조를 만듭니다. 이 방식은 실제 DOM 요소를 물리적으로 이동시켜 순서를 재배치하므로 복잡한 인덱스 계산이 필요 없습니다.

<script>
  function move(cmd) {
    if (cmd === "prev") {
      // 1. 마지막 요소를 보여줌
      $(".todayBg dd:last").show();
      // 2. 현재 화면의 마지막(3번째) 요소를 숨김
      $(".todayBg dd:eq(2)").hide();
      // 3. 마지막 요소를 리스트의 맨 앞으로 이동 (DOM 재배치)
      $(".todayBg dd:last").insertBefore(".todayBg dd:eq(0)");

    } else {
      // 1. 첫 번째 요소를 숨김
      $(".todayBg dd:eq(0)").hide();
      // 2. 숨겨져 있던 그 다음 요소(4번째)를 보여줌
      $(".todayBg dd:eq(3)").show();
      // 3. 첫 번째 요소를 리스트의 맨 뒤(버튼 바로 앞)로 이동
      $(".todayBg dd:eq(0)").insertBefore(".todayBg img:last");
    }
  }

  $(document).ready(function () {
    $(".todayBg .prev").click(function () { move("prev"); });
    $(".todayBg .next").click(function () { move("next"); });
  });
</script>

이 로직은 항상 화면에 정해진 개수(3개)의 dd만 노출시키며, 버튼 클릭 시 요소를 앞뒤로 붙여넣어 시각적인 롤링 효과를 구현합니다.

3. 활용 팁 및 퍼포먼스 고려사항

이 패턴은 '오늘 본 상품' 외에도 추천 상품 배너나 최근 본 글 리스트 등 좁은 영역의 세로 롤링 UI에 폭넓게 응용 가능합니다.

특히 별도의 외부 라이브러리를 로드하지 않으므로 페이지 초기 로딩 속도(LCP) 최적화에 유리하며, 가벼운 쇼핑몰 프론트엔드를 구축할 때 권장되는 방식입니다.

4. 자주 묻는 질문(FAQ)

Q1. 상품 개수가 노출 개수보다 적으면 어떻게 되나요?
강제 DOM 이동 로직이므로 동작이 어색할 수 있습니다. 실무에서는 아이템 개수를 체크하여 버튼을 비활성화하는 예외 처리가 필수입니다.

Q2. 애니메이션 효과를 추가하고 싶습니다.
현재 코드는 즉시 전환(Show/Hide) 방식입니다. 부드러운 전환을 원한다면 jQuery의 slideUp/Down을 체이닝하거나, CSS transition 클래스를 토글하는 방식으로 고도화해야 합니다.

댓글

이 블로그의 인기 게시물

Java Servlet Request Parameter 완전 정복 — GET/POST 모든 파라미터 확인 & 디버깅 예제 (Request Parameter 전체보기)

Java Servlet Request Parameter 완전 정복 — GET/POST 모든 파라미터 확인 & 디버깅 예제 Java Servlet Request Parameter 완전 정복 웹 애플리케이션에서 클라이언트로부터 전달되는 Request Parameter 를 확인하는 것은 필수입니다. 이 글에서는 Java Servlet 과 JSP 에서 GET/POST 요청 파라미터를 전체 출력하고 디버깅하는 방법을 다양한 예제와 함께 소개합니다. 1. 기본 예제: getParameterNames() 사용 Enumeration<String> params = request.getParameterNames(); System.out.println("----------------------------"); while (params.hasMoreElements()){ String name = params.nextElement(); System.out.println(name + " : " + request.getParameter(name)); } System.out.println("----------------------------"); 위 코드는 요청에 포함된 모든 파라미터 이름과 값을 출력하는 기본 방법입니다. 2. HTML Form과 연동 예제 <form action="CheckParamsServlet" method="post"> 이름: <input type="text" name="username"><br> 이메일: <input type="email" name="email"><b...

PostgreSQL 달력(일별,월별)

SQL 팁: GENERATE_SERIES로 일별, 월별 날짜 목록 만들기 SQL 팁: GENERATE_SERIES 로 일별, 월별 날짜 목록 만들기 데이터베이스에서 통계 리포트를 작성하거나 비어있는 날짜 데이터를 채워야 할 때, 특정 기간의 날짜 목록이 필요할 수 있습니다. PostgreSQL과 같은 데이터베이스에서는 GENERATE_SERIES 함수를 사용하여 이 작업을 매우 간단하게 처리할 수 있습니다. 1. 🗓️ 일별 날짜 목록 생성하기 2020년 1월 1일부터 12월 31일까지의 모든 날짜를 '1 day' 간격으로 생성하는 쿼리입니다. WITH date_series AS ( SELECT DATE(GENERATE_SERIES( TO_DATE('2020-01-01', 'YYYY-MM-DD'), TO_DATE('2020-12-31', 'YYYY-MM-DD'), '1 day' )) AS DATE ) SELECT DATE FROM date_series 이 쿼리는 WITH 절(CTE)을 사용하여 date_series 라는 임시 테이블을 만들고, GENERATE_SERIES 함수로 날짜를 채웁니다. 결과 (일별 출력) 2. 📅 월별 날짜 목록 생성하기 동일한 원리로, 간격을 '1 MONTH' 로 변경하면 월별 목록을 생성할 수 있습니다. TO...

CSS로 레이어 팝업 화면 가운데 정렬하는 방법 (top·left·transform 완전 정리)

레이어 팝업 센터 정렬, 이 코드만 알면 끝 (CSS 예제 포함) 이벤트 배너나 공지사항을 띄울 때 레이어 팝업(center 정렬) 을 깔끔하게 잡는 게 생각보다 어렵습니다. 화면 크기가 변해도 가운데에 고정되고, 모바일에서도 자연스럽게 보이게 하려면 position , top , left , transform 을 정확하게 이해해야 합니다. 이 글에서는 아래 내용을 예제로 정리합니다. 레이어 팝업(center 정렬)의 기본 개념 자주 사용하는 position: absolute / fixed 정렬 방식 질문에서 주신 스타일 top: 3.25%; left: 50%; transform: translateX(-50%) 의 의미 실무에서 바로 쓰는 반응형 레이어 팝업 HTML/CSS 예제 1. 레이어 팝업(center 정렬)이란? 레이어 팝업(레이어 팝업창) 은 새 창을 띄우는 것이 아니라, 현재 페이지 위에 div 레이어를 띄워서 공지사항, 광고, 이벤트 등을 보여주는 방식을 말합니다. 검색엔진(SEO) 입장에서도 같은 페이지 안에 HTML이 존재 하기 때문에 팝업 안의 텍스트도 정상적으로 인덱싱될 수 있습니다. 즉, “레이어 팝업 센터 정렬”, “레이어 팝업 만드는 방법”과 같이 관련 키워드를 적절히 넣어주면 검색 노출에 도움이 됩니다. 2. 질문에서 주신 레이어 팝업 스타일 분석 질문에서 주신 스타일은 다음과 같습니다. <div class="layer-popup" style="width:1210px; z-index:9001; position:absolute; top:3.25%; left:50%; transform:translateX(-50%);"> 레이어 팝업 내용 <...