본문 바로가기

coding/jQuery

jQuery - banner (fade & move 기능 추가) 만들기_2

(function($){

  //jQuery

 

  // 변수 선언 ==========================================

  var banner = $('.banner_02');

  

  var indicatorArea = banner.find('.indicator');

  var indicator = banner.find('.indicator');

  var indiLi = indicator.find('li');

  var indiLiLink = indiLi.find('a');

  

  var viewCount = banner.find('p');

  var totalNum = viewCount.find('.total');

  var nowNum = viewCount.find('.now');

  

  var playArea = banner.find('.play');

  var playBtn = playArea.children('button');

 

  var btnSelect = banner.find('.button_select');

  var nextBtn = btnSelect.find('.next');

  var prevBtn = btnSelect.find('.prev');

 

  var viewArea = banner.find('.view_area');

  var li = viewArea.find('li');

  var liLen = li.length;

  var n = 0;

  var n2 = n;



  // 인디케이터(ul) 생성 ================================

  indicatorArea.prepend('<ul class="indi_ul"></ul>');

  var indiUl = indicatorArea.find('.indi_ul');

  // console.log( indiUl );

  var i=0;

  var setNum = function(i){

    var num = '00' + (i+1);

    // 숫자 정수를 사용시 앞의 0은 사라지게 되므로,

    // 문자로 변경하여 마지막 숫자 2자리만 가져오게 하는 마법

    var setN = num.slice(-2);

    return setN;

  }

  for(; i < liLen ; i+=1 ){

    indiUl.append('<li><a href="#">' + (setNum+1) + '</a></li>'); 

  }

 

  // 함수는 각 기능별로 별도로 만들어서

  // 필요시에 각각 불러오도록 설정

  // 양이 많을경우 함수를 묶은 별도의 함수를 만들어서 사용

 

  // 함수 ================================================

  // 화면 배너 이동

  var slideFadeFn = function(){

    li.eq(n).show();

    li.eq(n2).fadeOut(function(){

      li.eq(n2).removeClass('act');

      li.eq(n).addClass('act');

      n2 = n;

    });

  };

  // 페이지 숫자 증가

  var countFn = function(){

    nowNum.text(n+1);

    totalNum.text(liLen);

  };

  // indicator 실행

  var indiActionFn = function(n){

    indiLi.eq(n).addClass('act');

    indiLi.eq(n).siblings().removeClass('act');

  };

  // 위 3개의 함수를 하나로 묶음 

  var allAct = function(){

    slideFadeFn(n);

    countFn(n);

    indiActionFn(n);

  };



  // 이벤트 ===============================================

  // 다음버튼 클릭

  nextBtn.on('click'function(e){

    e.preventDefault();

    n += 1;                  // n 값이 1씩 증가할때

    if(n > liLen-1){ n = 0 } // n값이 마지막이 되었을때(더이상 다음으로 넘어가지x), {첫번째요소로 돌아오게 한다.}

    allAct(n);

  }); // nextBtn.on('click');

 

  // 이전버튼 클릭

  prevBtn.on('click'function(e){

    e.preventDefault();

    n -= 1;                  // n값이 1씩 감소할때

    if(n < 0){ n = liLen-1 } // n값이 첫번째 보다 작을때, {마지막요소로 돌아가게 한다.}

    allAct(n);

  }); // prevBtn.on('click');

 

  // 인디케이터 클릭

  indiLiLink.on('click'function(e){

    e.preventDefault();

    n = $(this).parent().index();

    allAct(n);

  }); // indiLiLink.on('click');

 

  var timed = 1000;

  //트리거 수행 (대신해서 자동수행) ============================

  

  var slideClick;

  var slideGoFn = function(){

    slideClick = setInterval(function(){

    nextBtn.trigger('click');    

    }, timed*3);

  };

  var slidePauseFn = function(){ clearInterval(slideClick); };

    slideGoFn();

 

  // 마우스 올릴경우 수행 (mouseenter & mouseleave) ============

  // banner.on( 'mouseenter', function(){ slidePauseFn(); });

  // banner.on( 'mouseleave', function(){ slideGoFn();    });

 

  // 재생/일시정지 버튼 수행 ===================================

  var nowT = playBtn.text();

  var pauseT = '정지';

  var playState = [nowT, pauseT];

  // console.log( playState[0] );

  // 일부로 재생중에 .act를 삽입

  playBtn.addClass('act');

 

  playBtn.on('click'function(e){

    e.preventDefault();

    // hasClass('이름') -> 클래스명이 있으면 true, 없으면 false

    var isAct = $(this).hasClass('act');

    

    if(isAct){

      // act가 있으면 -> 재생중이니 정지

      slidePauseFn();

      playBtn.removeClass('act');

      playBtn.text(playState[1]);

    }else{

      // act가 없으면 -> 멈춰있으니 정지

      slideGoFn();

      playBtn.addClass('act');

      playBtn.text(playState[0]);

    }

  }); // playBtn.on('click');



  // ==============================================

  // 1. 다음 버튼을 누르면 뒤에나올 요소를 나오게 해라

  // 2. 현재 보이는 요소를 fadeOut() 사라지게 하고, 뒤에 요소는 미리 배치

  // 3. 마지막에 위치했을 경우 -> 처음요소가 나타나게 만들어라

  // 2-1. 앞에 있던 요소는 사라지면서(display:none) - z-index가 뒤로

  // 2-2. 뒤에 나올 요소는 앞의 요소가 사라지고 이후에 상황을 고려하여 z-index를 앞으로

  // 4. 전체 개수와 현재 보이는 요소의 순서 표기

  // 5. 인디케이터를 클릭시 해당 위치에 맞는 요소가 나타나게

  // 6. 인디케이터기능 시각효과 처리

  // 7. 중복수행중인 기능을 함수처리

  // 8. 인디케이터를 광고의 갯수에 따라 생성되게 만들기

  // 9. 자동으로 화면이 이동되게 만들기

  // 10. 일시정지, 재생버튼을 클릭하여 동작처리




})(jQuery);

=============================================================

(function($){

  //jQuery

 

  // 1. 마우스로 누른위치와 띄는 위치의 값을 확인 후 배너의 요소를 교체

  // 101. 마우스 누른위치와 띄는 위치값으로 1씩 더하거나 빼기

  // 102. 값이 + 이면 다음요소를 나타나게

  // 104. 값이 + 일경우 마지막요소가 나타나면 첫요소로 다시 이동

  // 106. 다음 요소가 나타나면 이전에 있던 요소의 act를 빼고, 새로나타난 요소에 재할당

 

  // 103. 값이 - 이면 이전요소를 나타나게

  // 105. 값이 - 일경우 첫요소가 나타나면 마지막 요소로 다시 이동

  

  var banner = $('.banner_touch');

  var viewArea = banner.find('.view_area');

  var viewLi = viewArea.find('li');

 

  var viewLiLen = viewLi.length;

 

  var startPoint;

  var endPoint;

  var resultPoint;

  

  var newN = 0;

  var beforeN = newN;

 

  // 함수

  var evtPositionFn = function(e){

    var evt = e.originalEvent;

    var eType = e.type.slice(0,5); // touchstart, touched

    // 글.slice(시작위치, 갯수);

 

    var checkPoint;

    /*

      if(eType === 'touch'){

        checkPoint = evt.changedTouches[0].pageX;

      }else{

        checkPoint = evt.pageX;

      }

    */

      (eType === 'touch') ?

        checkPoint = evt.changedTouches[0].pageX :

        checkPoint = evt.pageX;

 

      return checkPoint;

    };

 

  // 이벤트

  viewArea.on('mousedown touchstart'function(e){

    // 이벤트 발생기준으로 위치값을 파악

    

    startPoint = evtPositionFn(e);

  });

  viewArea.on('mouseup touchend'function(e){

    

    endPoint = evtPositionFn(e);

    resultPoint = startPoint - endPoint;

    // 시작점 끝점의 위치값이 음/양수에 대해 판단하여 내용을 다음버튼/이전버튼

    if(resultPoint > 50){

      newN += 1;

    }else if(resultPoint < -50){

      newN -= 1;

    }

 

    if(newN > viewLiLen-1){

      newN = 0;

    }else if(newN < 0){

      newN = viewLiLen-1;

    }

 

    if(beforeN !== newN){

      viewLi.eq(newN).show();

      viewLi.eq(beforeN).fadeOut(function(){

        viewLi.eq(beforeN).removeClass('act');

        viewLi.eq(newN).addClass('act');

        beforeN = newN;

      });

    }

 

  }); // viewArea.on('mouseup touchend');



})(jQuery);

'coding > jQuery' 카테고리의 다른 글

jQuery - scroll (move 기능 추가) 만들기  (0) 2021.07.21
jQuery - scroll 만들기  (0) 2021.07.21
jQuery - banner 만들기_2  (0) 2021.07.21
jQuery - banner와 indicator를 이용해 만들기  (0) 2021.07.21
jQuery - banner 요소 추가  (0) 2021.07.21