본문 바로가기

coding/jQuery

jQuery - banner와 indicator를 이용해 만들기

// js_017_banner_03_indicator.js

(function($){

  

  // 1. 인디케이터 클릭시 해당하는 광고내용이 움직이게

  // 101. 인디케이터를 어느것을 클릭했는지?

  // 102. 클릭한 인디케이터의 위치에 따른 광고의 위치?

  // 103. 선택한 순서에 맞는 인티케이터에 act를 담기

 

  var banner = $('.banner_01');

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

  var indiUl = indicator.find('ul');

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

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

 

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

  var viewUl = viewArea.find('ul');

 

  var n = 0;

 

  // 이벤트

  indiLink.on('click'function(e){                     // 주소에 해당하는 'a'태그 = indiLink를 클릭 시

    e.preventDefault();                                 // 기본적인 이벤트의 기능을 제어

    // 주체의 부모인 li의 순번

    var _thisI = $(this).parent().index();              // a 태그는 순서를 가지고 있지 않고, li는 순서를 가진다. 그렇기에 $(this)=a, 의 부모요소(parent())인 li가 몇번째에 위치해 있는가(index)

    n = _thisI;                                         // 위에 선언한 변수를 n 으로 설정하여, 위 내용을 indiLink 함수이외에는 모르기때문에, 밖에다 n에대한 값을 지정해서 인식하게 함

    // 광고이동

    viewUl.stop().animate({marginLeft: (-100*n) + '%'}) // 위의 결과로 viewUl이 현재 배너 화면이 animate로 왼쪽으로( marginLeft : -100% ) 이동해 다음화면이 나오도록 함.

 

    // .act 처리

    // $(this).parent().siblings().removeClass('act');

    // $(this).parent().addClass('act');

 

    indiLi.eq(n).addClass('act');                       // act class가 실행되도록 한다

    indiLi.eq(n).siblings().removeClass('act');         // 첫째 선택된거 외에 나머지 형제들을 제거 

  });

 

})(jQuery);

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

// js_017_banner_03_indicator_02.js

(function($){

  

  // 1. 인디케이터 클릭시 해당하는 광고내용이 움직이게

  // 1 하위 상세한 내용 (100단위)

  // 101. 인디케이터를 어느것을 클릭했는지?

  // 102. 클릭한 인디케이터의 위치에 따른 광고의 위치?

  // 103. 선택한 순서에 맞는 인티케이터에 act를 담기

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

  // 104. 일정시간마다 광고배너영역이 움직이도록 처리 -> setInterval

  // 105. 마우스 올리면 정지 -> clearInterval

  // 106. 일정시간마다 움직이다 마우스 올리면 정지, 벗어나면 다시 동작

  // 107. 마지막 내용이 보일때 처음으로 이동하는 형태로 수정 

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

 

  var banner = $('.banner_02');

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

  var indiUl = indicator.find('ul');

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

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

 

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

  var viewUl = viewArea.find('ul');

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

 

  var indiLiLen = indiLi.length;

  var n = 0;

  var timed = 600;

 

  // 마지막 요소 붙여넣기, ul의 가로길이 / li의 가로길이 조정

  var cloneLi = viewLi.eq(-1).clone(); 

  viewUl.prepend(cloneLi); // cloneLi 항목을 viewUl 앞에 붙인다.

  var newViewLi = viewUl.find('li');

  var newLen = newViewLi.length;

  // console.log(indiLiLen, newLen);

  viewUl.css({width:(100 * newLen ) + '%', left: -100 + '%', position: 'relative'});

  newViewLi.css({width:(100 / newLen) + '%'});

 

  // 함수 생성

  var slideMoveFn = function(n, interval){

    // setInterval기능과 마지막 위치에서 처음으로 이동시

    if( n <= 0 && interval){ viewUl.css({marginLeft:100 + '%'})};

    // 광고이동

    viewUl.stop().animate({marginLeft: (-100*n) + '%'}, timed);

    // act처리

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

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

  };

 

  // 이벤트

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

    e.preventDefault();

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

    slideMoveFn(n, false);

  });

 

  // 반복기능 -> clearInterval에서 제어하기위해 변수로 지정

  var autoMoveFn;

  var slideGoFn = function(){

    autoMoveFn = setInterval(function(){

      n += 1;

      if( n >= indiLiLen ){ n = 0; }

      slideMoveFn(n, true);

    }, timed*4);

    return autoMoveFn;

  };

 

  var slideStopFn = function(){

    clearInterval(autoMoveFn);

  };

  slideGoFn();

 

  banner.on({ 'mouseenter' : slideStopFn, 'mouseleave' : slideGoFn });

 

  // setInterval(기능수행, 시간); -> 일정 시간 마다 기능을 수행

  // setTimeout(기능수행, 시간); ->  일정 시간 후에 기능을 수행

  // clearInterval( 반복수행기능이름 ); -> setInterval기능을 강제로 정지

 

  // 선택자.trigger('이벤트') -> button.trigger('click') -> 버튼을 대신 클릭하겠다!

 

})(jQuery);

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

jQuery - banner (fade & move 기능 추가) 만들기_2  (0) 2021.07.21
jQuery - banner 만들기_2  (0) 2021.07.21
jQuery - banner 요소 추가  (0) 2021.07.21
jQuery - gallery  (0) 2021.07.21
jQuery - 06 mouseclick_xy  (0) 2021.07.21