πŸ“„ μ„œμšΈμ‹œμ²­

μ΅œμ€€ν˜„Β·2022λ…„ 7μ›” 24일
0
post-thumbnail
μ œμž‘κΈ°κ°„ 22.05.29 ~ 22.05.31 (3일 μ†Œμš”)
μ‚¬μš© μ–Έμ–΄ html, css, jquery
μ‚¬μš© ν”ŒλŸ¬κ·ΈμΈ swiper
λΆ„λ₯˜ pc, 클둠코딩


βœ” blind


πŸ’¬ 화면상에 보여지지 μ•Šμ§€λ§Œ μ›Ή 접근성을 κ³ λ €ν•˜λ©΄ κΌ­ ν•„μš”ν•œ μš”μ†Œλ“€μ΄ μžˆμ„ λ•ŒλŠ” blindλ₯Ό ν•˜κ²Œλ©λ‹ˆλ‹€.

πŸ“Œ μ›Ή 접근성을 κ³ λ €ν•˜μ§€ μ•ŠλŠ” blind

.blind {
	display: none;
}
.blind {
	visibility: hidden;
}

πŸ’¬ μœ„μ™€ 같이 display: none μ΄λ‚˜ visibility: hidden은 ν™”λ©΄μ—μ„œλŠ” 보여지지 μ•Šμ§€λ§Œ 슀크린 λ¦¬λ”κΈ°λ‘œλ„ 읽을 μˆ˜κ°€ μ—†κΈ° λ•Œλ¬Έμ— 접근성에 μ–΄κΈ‹λ‚˜κ²Œ λ©λ‹ˆλ‹€.

πŸ“Œ μ›Ή 접근성을 κ³ λ €ν•œ blind

.blind {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  clip: rect(0 0 0 0);
  overflow: hidden;
}

πŸ’¬ clip속성을 μ΄μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” position: absolute, fixed일 λ•Œ κ°€λŠ₯ν•˜λ―€λ‘œ position을 μž‘μ•„μ€€ ν›„, width와 heightκ°€ 0인 μ»¨ν…μΈ λŠ” 읽을 수 μ—†μœΌλ―€λ‘œ μ΅œμ†Œ 1pxμ”© μ£Όκ³  clip으둜 μž˜λΌμ„œ margin: -1px, overflow: hidden을 κ±Έμ–΄μ£Όλ©΄ μš°λ¦¬κ°€ μ›ν•˜λŠ” blindλ₯Ό clip속성을 μ΄μš©ν•˜μ—¬ κ°„νŽΈν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.



βœ” Swiper


swiperλž€ ❔

λ‹€μ–‘ν•œ ν”„λ ˆμž„μ›Œν¬μ—μ„œ μ΄λ―Έμ§€λ‚˜ νŽ˜μ΄μ§€μ˜ μŠ¬λΌμ΄λ”© ν˜Ήμ€ μŠ€μ™€μ΄ν•‘μ„ μ—­λ™μ μœΌλ‘œ μ‚¬μš©ν•  수 있게 λ„μ™€μ£ΌλŠ” 널리 μ‚¬μš©λ˜λŠ” μŠ¬λΌμ΄λ” ν”ŒλŸ¬κ·ΈμΈ μ€‘μ˜ ν•˜λ‚˜μž…λ‹ˆλ‹€.

swiper의 μž₯점 ❕

πŸ‘‰ μ΅œμ†Œν•œμ˜ κ΅¬μ„±μœΌλ‘œ λ„€λΉ„κ²Œμ΄μ…˜ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜μ—¬ κ°„νŽΈν•©λ‹ˆλ‹€.
πŸ‘‰ Swiping κΈ°λŠ₯이 λ‚΄μž¬λ˜μ–΄ μžˆμ–΄ λ°˜μ‘ν˜• μ‚¬μ΄νŠΈμ—μ„œ μ‚¬μš©ν•˜κΈ° μ’‹μŠ΅λ‹ˆλ‹€.
πŸ‘‰ Fade-Effect, 3D CSS StylingκΉŒμ§€ κ°€λŠ₯ν•˜μ—¬ 높은 ν™•μž₯성을 가지고 μžˆμŠ΅λ‹ˆλ‹€.

πŸ–Š μ„œμšΈμ‹œμ²­ λ©”μΈμŠ¬λΌμ΄λ“œ

var slide_news_swiper = new Swiper(".slide-news", {
    loop: true,
    allowTouchMove : false,
    autoplay: {
        delay : 2500,
        speed : 500,
        disableOnInteraction: false,
    },
    pagination: {
        el: ".swiper-pagination",
        type: "fraction",
    },
    navigation: {
        nextEl: ".swiper-button-next",
        prevEl: ".swiper-button-prev",
    },
});

πŸ’¬ μ„œμšΈμ‹œμ²­ λ©”μΈμŠ¬λΌμ΄λ“œλŠ” paginationκ³Ό navigation이 ν¬ν•¨λ˜μ–΄ μžˆμ–΄μ„œ μ μ ˆν•œ swiper demoλ₯Ό μ°Ύμ•„ κ°€μ Έμ™”μŠ΅λ‹ˆλ‹€.

  • λΆ€κ°€ μ˜΅μ…˜
    • loop : true // μŠ¬λΌμ΄λ“œκ°€ λ¬΄ν•œμœΌλ‘œ μž¬μƒ
    • allowTouchMove : false // 마우슀 λ“œλž˜κ·Έκ°€ κ°€λŠ₯ν•˜λ„λ‘ κΈ°λ³Έ 섀정이 λ˜μ–΄ μžˆμ§€λ§Œ false둜 μ μš©ν•˜μ—¬ λ“œλž˜κ·Έλ₯Ό 방지
    • autoPlay : μžλ™μž¬μƒ μ˜΅μ…˜
      - delay : 2500 // 2.5초 후에 λ‹€μŒ μŠ¬λΌμ΄λ“œ 진행
      - speed : 500 // 0.5초의 μ†λ„λ‘œ μŠ¬λΌμ΄λ“œ 진행
      - disableOnInteraction : μŠ€μ™€μ΄ν”„ ν›„ μžλ™μž¬μƒμ΄ λΉ„ν™œμ„±ν™” λ˜μ§€ μ•ŠμŒ

πŸ–Š νƒ­ 메뉴 클릭 이벀트

$('.tab-menu').click(function (e) {});

πŸ’¬ μ„œμšΈμ‹œμ²­ λ©”μΈμŠ¬λΌμ΄λ“œμ—μ„œλŠ” νƒ­ 메뉴가 μ£Όμš”λ‰΄μŠ€μ™€ μ‹œλ―Όμ°Έμ—¬ 총 2개의 탭이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

πŸ“Œ active 클래슀 μΆ”κ°€/제거

$('.tab-menu.active, .mainSlide.active').removeClass('active');
$(this).addClass('active').siblings('.mainSlide').addClass('active');

πŸ’¬ νƒ­ λ²„νŠΌμ„ λˆ„λ₯΄κ²Œ 되면 ν™œμ„±ν™” 된 νƒ­ 메뉴와 ν•΄λ‹Ήν•˜λŠ” μŠ¬λΌμ΄λ“œμ˜ active 클래슀λ₯Ό μ œκ±°ν•˜μ—¬ display:none으둜 λ°”κΏ”μ£Όκ³  ν΄λ¦­ν•œ 메뉴와 ν•΄λ‹Ή μŠ¬λΌμ΄λ“œμ— active 클래슀λ₯Ό μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€

πŸ“Œ 쑰건문) ν™œμ„±ν™” 된 μŠ¬λΌμ΄λ“œλ§Œ autoplay

if ($(this).parent().hasClass('menu-news')) {
	slide_news_swiper.autoplay.start();
    slide_part_swiper.autoplay.stop();
} else {
    slide_part_swiper.autoplay.start();
    slide_news_swiper.autoplay.stop();
}
// slide_news_swiper // μ₯¬μš”λ‰΄μŠ€ μŠ¬λΌμ΄λ“œ
// slide_part_swiper // μ‹œλ―Όμ°Έμ—¬ μŠ¬λΌμ΄λ“œ

πŸ’¬ 단, ν™œμ„±ν™” 된 μŠ¬λΌμ΄λ“œκ°€ 화면에 λ³΄μ—¬μ§ˆ λ•Œ, ν™œμ„±ν™”κ°€ λ˜μ§€ μ•Šμ€ μŠ¬λΌμ΄λ“œμ˜ μžλ™μž¬μƒμ΄ λ©ˆμΆ°μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 쑰건문을 κ±Έμ–΄μ€λ‹ˆλ‹€.


πŸ’¬ νƒ­ λ²„νŠΌ λΆ€λͺ¨μ˜ ν΄λž˜μŠ€κ°€ menu-news(μ£Όμš”λ‰΄μŠ€)라면 μ£Όμš”λ‰΄μŠ€ μŠ¬λΌμ΄λ“œλŠ” .autoplay.start(), μ‹œλ―Όμ°Έμ—¬ μŠ¬λΌμ΄λ“œλŠ” autoplay.stop(), elseμ—μ„œλŠ” λ°˜λŒ€λ‘œ κ±Έμ–΄μ€λ‹ˆλ‹€.

πŸ“Œ 쑰건문) μŠ¬λΌμ΄λ“œ μ •μ§€λ²„νŠΌ ν™œμ„±ν™” 된 μƒνƒœμΌ λ•Œ μ œμ™Έ

if ($(this).siblings().find('.button-control').hasClass('stop')) {
	slide_news_swiper.autoplay.stop();
} else {
	slide_news_swiper.autoplay.start();
}
slide_part_swiper.autoplay.stop();

πŸ’¬ μž¬μƒ/μ •μ§€λ²„νŠΌμ—μ„œ μ •μ§€λ²„νŠΌμ΄ λˆŒλŸ¬μ ΈμžˆλŠ” μƒνƒœμ—μ„œλŠ” νƒ­ λ²„νŠΌμ„ λˆŒλŸ¬λ„ μž¬μƒμ΄ 되면 μ•ˆλ˜κΈ° λ•Œλ¬Έμ— μ—¬κΈ°μ„œλ„ 쑰건문을 κ±Έμ–΄μ€λ‹ˆλ‹€.

βž• λ°°λ„ˆ μŠ¬λΌμ΄λ“œ πŸ’¬ νŽ˜μ΄μ§€ ν•˜λ‹¨μ— μžˆλŠ” λ°°λ„ˆ μŠ¬λΌμ΄λ“œλ„ 같은 λ°©μ‹μœΌλ‘œ μ œμž‘ν•˜μ˜€μŠ΅λ‹ˆλ‹€

πŸ”˜ μ΅œμ’…μ½”λ“œ

$('.tab-menu').click(function (e) {
    e.preventDefault();
    $('.tab-menu.active, .mainSlide.active').removeClass('active')
    $(this).addClass('active').siblings('.mainSlide').addClass('active');
    if ($(this).parent().hasClass('menu-news')) {
        if ($(this).siblings().find('.button-control').hasClass('stop')) {
            slide_news_swiper.autoplay.stop();
        }else {
            slide_news_swiper.autoplay.start();
        }
        slide_part_swiper.autoplay.stop();
    } else {
        if ($(this).siblings().find('.button-control').hasClass('stop')) {
            slide_part_swiper.autoplay.stop();
        }else {
            slide_part_swiper.autoplay.start();
        }
        slide_news_swiper.autoplay.stop();
    }
});

πŸ–Š μŠ¬λΌμ΄λ“œ mouseover/mouseout

πŸ“Œ mouseover

$('.mainSlide').mouseover(function(){
  slide_news_swiper.autoplay.stop();
  slide_part_swiper.autoplay.stop();
}); 

πŸ’¬ mouseover일 μ‹œ μŠ¬λΌμ΄λ“œ 정지

πŸ“Œ mouseout

$('.mainSlide').mouseout(function(){
    if($(this).parent().hasClass('menu-news')) {
        if($(this).find('.button-control').hasClass('stop')) {
            slide_news_swiper.autoplay.stop();
        } else {
            slide_news_swiper.autoplay.start();
        }
    } else {
        if($(this).find('.button-control').hasClass('stop')) {
            slide_part_swiper.autoplay.stop();
        } else {
            slide_part_swiper.autoplay.start();
        }
    }
});   

πŸ’¬ νƒ­ 메뉴 μ΄λ²€νŠΈμ™€ λΉ„μŠ·ν•˜κ²Œ λ§ˆμš°μŠ€κ°€ μŠ¬λΌμ΄λ“œ 밖을 λ²—μ–΄λ‚˜λ©΄ autoplayκ°€ λ‹€μ‹œ ν™œμ„±ν™” λ˜μ§€λ§Œ μ •μ§€λ²„νŠΌμ΄ λˆŒλ €μ„ λ•ŒλŠ” μ œμ™Έν•΄μ•Ό ν•©λ‹ˆλ‹€.



βœ” ν‚€λ³΄λ“œ 이벀트 - keydown

πŸ’¬ ν‚€λ³΄λ“œ 이벀트 κ°μ²΄μ—λŠ” λˆŒλ¦¬κ±°λ‚˜ 놓아진 킀에 λ‹€μ–‘ν•œ 메타정보닀 담겨 μžˆμŠ΅λ‹ˆλ‹€. keyμ†μ„±μ—λŠ” ν‚€ 값이, codeμ†μ„±μ—λŠ” μ½”λ“œ 값이, shiftKeyμ†μ„±μ—λŠ” μ‰¬ν”„νŠΈν‚€κ°€ ν•¨κ»˜ λˆŒλ ΈλŠ”μ§€μ— λŒ€ν•œ μ—¬λΆ€κ°€ μ €μž₯λ©λ‹ˆλ‹€.

πŸ’¬ keydown μ΄λ²€νŠΈλŠ” μ—¬λŸ¬κ°€μ§€ ν‚€λ³΄λ“œ 이벀트 쀑 ν•˜λ‚˜λ‘œ, μ‚¬μš©μžκ°€ ν‚€λ₯Ό λˆ„λ₯Ό λ•Œ λ°œμƒν•˜λŠ” μ΄λ²€νŠΈμž…λ‹ˆλ‹€.
β—Ύ μ‚¬μš©μžκ°€ ν‚€λ₯Ό λ—„ λ•Œ λ°œμƒν•˜λŠ” keyup μ΄λ²€νŠΈλ„ μžˆμŠ΅λ‹ˆλ‹€.

πŸ“Œ μŠ¬λΌμ΄λ“œκ°€ μ—΄λ €μžˆμ„ λ•Œ 첫/λ§ˆμ§€λ§‰ μš”μ†Œμ—μ„œ shift+tab/tab λˆŒλ €μ„ λ•Œ μŠ¬λΌμ΄λ“œ λ‹«κΈ°

$('.bottom-menu-area .submenu-list:first-child .link-submenu').keydown(function(e){
    var keyCode = e.keycode || e.which;
    if (keyCode == 9 && e.shiftKey) {
        $('.submenu-wrap').stop().slideUp();
    }
})
$('.bottom-menu-area .submenu-list:last-child .link-submenu').keydown(function(e){
    var keyCode = e.keycode || e.which;
    if (keyCode == 9 && !e.shiftKey) {
        $('.submenu-wrap').stop().slideUp();
    }
})

πŸ’¬ λˆ„λ₯Έ ν‚€λ³΄λ“œμ˜ ν‚€μ˜ μœ λ‹ˆμ½”λ“œ 값을 λ³€μˆ˜ keyCode에 λ„£μ–΄μ£Όκ³ ,
tab은 μœ λ‹ˆμ½”λ“œ 값이 9μ΄λ―€λ‘œ λ§ˆμ§€λ§‰ μš”μ†Œμ—μ„œ keyCode == 9인 λ™μ‹œμ— shift λˆŒλ €λŠ”μ§€μ— μœ λ¬΄λ„ κ³ λ €ν•˜μ—¬ e.shiftKeyκΉŒμ§€ 쑰건을 κ±Έμ–΄μ„œ .slideUp()을 κ±Έμ–΄μ€λ‹ˆλ‹€.


βœ” btn-top

  $('.btn-top').click(function(e){
      e.preventDefault();
      $('html, body').animate({
          scrollTop: 0
      }, 300);
      $('.submenu-wrap').stop().slideUp();
      $('.bottom-menu-area .menu-list').removeClass('active');
  })

πŸ’¬ animateλ₯Ό μ΄μš©ν•˜μ—¬ scrollTop: 0으둜 μ‘°μ •ν•˜μ—¬ μœ„λ‘œ λΆ€λ“œλŸ½κ²Œ μ›€μ§μ΄λ©΄μ„œ μ—΄λ €μžˆλ˜ μŠ¬λΌμ΄λ“œλŠ” λ‹«νžˆκ²Œ ν•˜κ³  ν™œμ„±ν™” 클래슀인 active도 μ‚­μ œν•΄μ„œ 초기 μƒνƒœλ‘œ λ˜λŒλ ΈμŠ΅λ‹ˆλ‹€.

0개의 λŒ“κΈ€