์„œ์šธ์‹œ์ฒญ

liimยท2023๋…„ 3์›” 26์ผ
0

๐Ÿ–ฅ ์„œ์šธ์‹œ์ฒญ (ํด๋ก ์ฝ”๋”ฉ / ์ ์‘ํ˜• PC)


๐Ÿ“ข Check Point

  1. ์Šคํ‚ต ๋‚ด๋น„๊ฒŒ์ด์…˜
  2. value ๊ฐ’์œผ๋กœ ์‚ฌ์ดํŠธ ์ด๋™
  3. data ์†์„ฑ์œผ๋กœ ์Šฌ๋ผ์ด๋“œ ์ด๋™
  4. ์ ‘๊ทผ์„ฑ์„ ๊ณ ๋ คํ•œ ํƒœ๊ทธ ์ž‘์„ฑ ์ˆœ์„œ
  5. ํ‚ค๋ณด๋“œ ์ด๋ฒคํŠธ (keyboard event)


1. ์Šคํ‚ต ๋‚ด๋น„๊ฒŒ์ด์…˜

๐Ÿ‘‰ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

์‹œ๊ฐ ์žฅ์• ์ธ ๋˜๋Š” ๋งˆ์šฐ์Šค ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€ํ•œ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ์ด ํŽธ๋ฆฌํ•˜๊ฒŒ ์ ‘๊ทผ์„ฑ์„ ์œ„ํ•ด ์“ฐ์ธ๋‹ค. ์ฝ˜ํ…์ธ ๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ tab ํ‚ค๋ฅผ ์ˆ˜์—†์ด ๋ˆ„๋ฅด๋Š” ํ–‰์œ„ ๋Œ€์‹  ์›ํ•˜๋Š” ์˜์—ญ์œผ๋กœ ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋‰ด ๋ฐ”๋กœ๊ฐ€๊ธฐ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

<div class="skip-nav">
	<a href="#main">๋ณธ๋ฌธ๋‚ด์šฉ ๋ฐ”๋กœ๊ฐ€๊ธฐ</a>
</div>



2. value ๊ฐ’์œผ๋กœ ์‚ฌ์ดํŠธ ์ด๋™

<div class="lang-area">
	<select name=""  class="lang-select" id="langList">
		<option value="http://english.seoul.go.kr/?SSid=101_01">ENGLISH</option>
		<option value="http://japanese.seoul.go.kr/?SSid=101_02">ๆ—ฅๆœฌ่ชž</option>
		<option value="http://chinese.seoul.go.kr/?SSid=101_04">็ฎ€ไฝ“ไธญๆ–‡</option>
		<option value="http://tchinese.seoul.go.kr/?SSid=101_03">็นไฝ“ไธญๆ–‡</option>
		<option value="http://world.seoul.go.kr/">WorldWide</option>
	</select>
  
	<button type="button" class="btn-go" id="langBtn">GO</button>
</div>
$('#langBtn').click(function(){
  url = $('#langList').val();
  window.open(url);
});
  • select > option value ๊ฐ’์— ๊ฐ ์–ธ์–ด ์‚ฌ์ดํŠธ ์ฃผ์†Œ๋ฅผ ๋„ฃ๊ณ 
  • click ์ด๋ฒคํŠธ๋กœ GO ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํ•ด๋‹น value ๊ฐ’์„ ๊ฐ€์ ธ์™€ ์ด๋™ํ•˜๊ฒŒ ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ


3. data ์†์„ฑ์œผ๋กœ ์Šฌ๋ผ์ด๋“œ ์ด๋™ (ใ……ใ…‚)

const mainSlide = new Swiper(".main-slide", {

    speed:1000,
    loop:true,
    autoplay:{
        delay:1000,
        disableOnInteraction: false,
    },
    pagination:{
        el:".fraction",
        type:"fraction"
    },
    navigation:{
        nextEl:'.next',
        prevEl:'.prev'
    },
    on:{
        "slideChange":function(){
            if(this.realIndex >= 3){
                $('.sc-slidebanner .tab.citizen').addClass('on').siblings().removeClass('on');
            }else{
                $('.sc-slidebanner .tab.news').addClass('on').siblings().removeClass('on');
            }
        }
    }
});

๐Ÿ‘‰ tab ์˜์—ญ ํ™œ์„ฑํ™”

์ธ๋ฑ์Šค๊ฐ€ 3 ์ด์ƒ์ด๋ฉด ์‹œ๋ฏผ์ฐธ์—ฌ ํƒญ ํ™œ์„ฑํ™”

if(this.realIndex >= 3){
$('.sc-slidebanner .tab.citizen').addClass('on').siblings().removeClass('on');

์•„๋‹ˆ๋ฉด ์ฃผ์š”๋‰ด์Šค ํ™œ์„ฑํ™”

} else{
$('.sc-slidebanner .tab.news').addClass('on').siblings().removeClass('on');
}


๐Ÿ‘‰ ์˜คํ† ํ”Œ๋ ˆ์ด ์Šคํฌ๋ฆฝํŠธ

$('.main-slide .autoplay').click(function(){
    if($(this).hasClass('on')){
        $(this).removeClass('on')
        mainSlide.autoplay.start()
    }else{
        $(this).addClass('on')
        mainSlide.autoplay.stop()
  }
});
  • โ–ถ๏ธŽ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ (on์ด ์žˆ๋‹ค) on ํด๋ž˜์Šค ์‚ญ์ œ, ์ž๋™์žฌ์ƒ ์‹œ์ž‘
  • ll ย ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ (on์ด ์—†๋‹ค) on ํด๋ž˜์Šค ์ถ”๊ฐ€, ์ž๋™์žฌ์ƒ ๋ฉˆ์ถค

<div class="group-tab">
	<button type="button" class="tab news" data-tab="0">
		<i class="ic"></i>
		<strong class="title">์ฃผ์š”๋‰ด์Šค</strong>
	</button>
	<button type="button" class="tab citizen" data-tab="3">
		<i class="ic"></i>
		<strong class="title">์‹œ๋ฏผ์ฐธ์—ฌ</strong>
	</button>
</div>
$('.sc-slidebanner .group-tab .tab').click(function(){
	idx = $(this).data('tab')
	$(this).addClass('on').siblings().removeClass('on');
	mainSlide.slideTo(idx)
})

idx = $(this).data('tab') data-tab ๊ฐ’์„ ๊ฐ€์ ธ์™€ ์ž‘๋™ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ
ํด๋ฆญํ•œ ํƒญ์˜ data-tap ๊ฐ’์ด 0์ด๋ฉด 1๋ฒˆ ์Šฌ๋ผ์ด๋“œ๋กœ ์ด๋™,
๊ฐ’์ด 3์ด๋ฉด 4๋ฒˆ ์Šฌ๋ผ์ด๋“œ๋กœ ์ด๋™ (์ œ๋กœ๋ฒ ์ด์Šค)
๋ฐฐ๊ฒฝ์ƒ‰๊ณผ ํ™”์‚ดํ‘œ ๋ชจ์–‘๋„ ํ™œ์„ฑํ™” ๋œ๋‹ค.


4. ์ ‘๊ทผ์„ฑ์„ ๊ณ ๋ คํ•œ ํƒœ๊ทธ ์ž‘์„ฑ ์ˆœ์„œ

<section class="sc-servicelist">
    <div class="group-title">
        <h2 class="headtitle">์ฃผ์š” ์„œ๋น„์Šค</h2>
        <div class="sub-area">
            <a href="" class="story"><span class="blind">์Šคํ† ๋ฆฌ in ์„œ์šธ</span></a>
            <i class="bar"></i>
            <a href="" class="festival"><span class="blind">ํŽ˜์Šคํ‹ฐ๋ฒŒ ์„œ์šธ</span></a>
        </div>
    </div>
    <ul class="service-list">
        <li class="service-item">
            <a href=""> 
                <i class="ic public"></i> 
            	<span class="title">๊ณต๊ณต์„œ๋น„์Šค์˜ˆ์•ฝ</span> 
            </a>
        </li>
        ...(์ƒ๋žต)
    </ul>
    <a href="" class="link-all">์ „์ฒด๋ˆ„๋ฆฌ์ง‘</a>
</section>

๐Ÿค” ์‹œ๊ฐ์ ์œผ๋กœ๋Š” ์ฃผ์š”์„œ๋น„์Šค > ์ „์ฒด๋ˆ„๋ฆฌ์ง‘ > ์Šคํ† ๋ฆฌ/ํŽ˜์Šคํ‹ฐ๋ฒŒ์„œ์šธ > ์•„์ด์ฝ˜ ๋ฆฌ์ŠคํŠธ ์ˆœ์„œ์ง€๋งŒ
์ ‘๊ทผ์„ฑ ์ธก๋ฉด์—์„œ ์ƒ๊ฐํ•˜์—ฌ ์ฃผ์š”์„œ๋น„์Šค > ์Šคํ† ๋ฆฌ/ํŽ˜์Šคํ‹ฐ๋ฒŒ์„œ์šธ > ์•„์ด์ฝ˜ ๋ฆฌ์ŠคํŠธ > ์ „์ฒด๋ˆ„๋ฆฌ์ง‘ ์ˆœ์„œ๋กœ
'์ „์ฒด๋ˆ„๋ฆฌ์ง‘' ๋ฒ„ํŠผ์„ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์ž‘์„ฑํ•˜์˜€๋‹ค.


5. ํ‚ค๋ณด๋“œ ์ด๋ฒคํŠธ (keyboard event)

// tab ํ‚ค + ์‰ฌํ”„ํŠธ ํ‚ค๋ฅผ ๊ฐ™์ด ๋ˆŒ๋ €์„ ๋•Œ
$('.sc-related .sub-list li:first-child').keydown(function(e){
    key = e.keyCode;
    if(key === 9 && e.shiftKey){
        $('.btn-nav').removeClass('on');
        $('.sub-area').stop().slideUp();
    };
});

// tab ํ‚ค๋งŒ ๋ˆŒ๋ €์„ ๋•Œ
$('.sc-related .sub-list li:last-child').keydown(function(e){
    if(key === 9 && !e.shiftKey){
        $('.btn-nav').removeClass('on');
        $('.sub-area').stop().slideUp();
    };
});
  • key === 9 โ†’ tab ํ‚ค๋Š” 9๋ฒˆ
  • ์ฒซ ๋ฒˆ์งธ ๋ฉ”๋‰ด๊ฐ€ ์„ ํƒ๋œ ์ƒํƒœ์—์„œ shift+tab ํ‚ค๋ฅผ ๋ˆ„๋ฅผ ๋•Œ,
    ๋งˆ์ง€๋ง‰ ๋ฉ”๋‰ด๊ฐ€ ์„ ํƒ๋œ ์ƒํƒœ์—์„œ tab ํ‚ค๋ฅผ ๋ˆ„๋ฅผ ๋•Œ ์Šฌ๋ผ์ด๋“œ๋Š” ๋‹ซํžˆ๊ฒŒ ๋œ๋‹ค.

keyup
ํ‚ค๋ณด๋“œ๋ฅผ ๋ˆŒ๋ €๋‹ค๊ฐ€ ๋–ผ๋Š” ์‹œ์ ์— ์ด๋ฒคํŠธ ๋ฐœ์ƒ
keydown
ํ‚ค๋ณด๋“œ๋ฅผ ๋ˆ„๋ฅด๋Š” ์‹œ์ ์— ์ด๋ฒคํŠธ ๋ฐœ์ƒ
ํ‚ค๋ณด๋“œ๋ฅผ ๊ณ„์† ๋ˆ„๋ฅด๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์ฒ˜์Œ ํ•œ ๋ฒˆ๋งŒ ์ด๋ฒคํŠธ ๋ฐœ์ƒ

profile
Web Publisher

0๊ฐœ์˜ ๋Œ“๊ธ€