๐ŸฃcodeLab

[์•„์ฝ”๋””์–ธ๋ฉ”๋‰ด] 3level accordion menu

jmjm 2020. 3. 24. 18:56

[์•„์ฝ”๋””์–ธ๋ฉ”๋‰ด] 3level accordionMenu

๋จผ์ € ๊ฒฐ๊ณผ.

 

์ฝ”๋“œ๋ฆฌ๋ทฐ.

1. slideDown() ์กฐ๊ฑด.

ํ•ด๋‹น a ํด๋ฆญ ์‹œ,

  1. a ๋ฐ”๋กœ ๋ฐ‘ ํ˜•์ œ ์š”์†Œ ul ์ด ์กด์žฌํ•˜๋ฉฐ,
  2. ul์ด ๋ณด์ด์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
$('a').on('click', function() {
  // 1. ul ์กด์žฌํ•˜๋ฉฐ, ul์ด ๋ณด์ด์ง€ ์•Š์•„์•ผํ•œ๋‹ค.
  if( $(this).next().is('ul') && !($(this).next().is(':visible')) ) {
    // console.log('slideDown');
    $(this).next().slideDown();
    return false;
  }
});

 

2. slideUp() ์กฐ๊ฑด

ํ•ด๋‹น aํด๋ฆญ ์‹œ,

  1. a ๋ฐ”๋กœ ๋ฐ‘ ํ˜•์ œ ์š”์†Œ ul์ด ์กด์žฌํ•˜๋ฉฐ,
  2. ul์ด ๋ณด์—ฌ์•ผํ•œ๋‹ค.
$('a').on('click', function() {
  // 2. ul ์กด์žฌํ•˜๋ฉฐ, ul์ด ๋ณด์—ฌ์•ผ๋‹ค.
  if( $(this).next().is('ul') && ($(this).next().is(':visible')) ) {
    // console.log('slideUp');
    $(this).next().slideUp();
    return false;
  }
});

 

๊ฒฐ๊ณผ.

$('a').on('click', function() {
  // 1. ul ์กด์žฌํ•˜๋ฉฐ, ul์ด ๋ณด์ด์ง€ ์•Š์•„์•ผํ•œ๋‹ค.
  if( $(this).next().is('ul') && !($(this).next().is(':visible')) ) {
    // console.log('slideDown');
    $(this).next().slideDown();
    reuturn false;
  }
  
  // 2. ul ์กด์žฌํ•˜๋ฉฐ, ul์ด ๋ณด์—ฌ์•ผ๋‹ค.
  if( $(this).next().is('ul') && ($(this).next().is(':visible')) ) {
    // console.log('slideUp');
    $(this).next().slideUp();
    return false;
});

 

์ถ”๊ฐ€ ์กฐ๊ฑด.

Q. slideDown() ๋œ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ a ํด๋ฆญ ์‹œ,

๋ˆŒ๋ €๋˜ ul์€ slideUp() ๋˜๊ณ  ๋ˆ„๋ฅธ ul์€ slideDown() ๋  ์ˆ˜ ์—†์„๊นŒ?

if( $(this).next().is('ul') && !$(this).next().is(':visible')) ) {
  // slideDown
  // ul ์ค‘์— $('ul')
  // ๋‚ด๊ฐ€ ํด๋ฆญํ–ˆ๋˜ ๊ฒƒ ๋ง๊ณ  $('ul').not($(this).next())
  // slideUp
  $('.menu ul').not($(this).next()).slideUp();
}

 

โ—๏ธ์ฃผ์˜ํ•ด์•ผ ํ•  ์ 1.

ul ์ค‘์— $('ul') ์ด ์•„๋‹ˆ๋ผ $(.menu ul)์ด๋‹ค.

$('ul')๋กœ ํ•  ๊ฒฝ์šฐ, ul.menu ๋„ ๊ฐ™์ด ์‚ฌ๋ผ์ ธ ๋ฒ„๋ฆฌ๊ธฐ๋•Œ๋ฌธ.

 

โ—๏ธ์ฃผ์˜ํ•ด์•ผ ํ•  ์ 2.

ํด๋ž˜์Šค์™€ ํƒ์ƒ‰ ์„ ํƒ์ž๋ฅผ ๋„ฃ์–ด ๋ช…ํ™•ํžˆ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. (๋‹ค๋ฅธ ์š”์†Œ์™€ ์ด๋ฒคํŠธ๊ฐ€ ๊ผฌ์—ฌ๋ฒ„๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค.)

$('.menu ul').not($(this.next().parentsUntil('.menu')).slideUp()

parentsUntil() :: ์„ ํƒํ•œ ์š”์†Œ์˜ ์ƒ์œ„ ์š”์†Œ ์ค‘์—์„œ ์ง€์ •ํ•œ ์„ ํƒ์ž์— ํ•ด๋‹นํ•˜๋Š” ์š”์†Œ ๋ฐ”๋กœ ์ด์ „๊นŒ์ง€์˜ ์š”์†Œ๋ฅผ ๋ชจ๋‘ ์„ ํƒํ•œ๋‹ค.

 

if( $(this).next().is('ul') && !$(this).next().is(':visible')) ) {
  $('.menu ul').not($(this).next().parentsUntil('.menu')).slideUp();
}

 

 

 

 

a ๋ฅผ ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น ul ($(this).next())์ด ๋ณ€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ž๊พธ ์žŠ๋Š”๋‹ค. ๊ณ„์† ์ธ์‹ํ•˜๊ณ  ์ƒ๊ฐํ•˜๋ฉด์„œ ์ฝ”๋“œ ์งœ์ž๐Ÿ”ฅ