Как сделать такой переключатель?

Есть три кнопки, при нажатии на которые появляется соответствующий блок и прячутся остальные. Вот мой пример:
https://jsfiddle.net/eb0x33se/5/
Но хотелось бы узнать как можно это реализовать более правильно.
  • Вопрос задан
  • 212 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
<button data-block="block-one">69</button>
<button data-block="block-two">187</button>
<button data-block="block-three">666</button>

<div class="block block-one">hello, world!!</div>
<div class="block block-two">fuck the world</div>
<div class="block block-three">fuck everything</div>

$('body').on('click', 'button', function() {
  const $block = $(`.${this.dataset.block}`).toggleClass('show');
  $('.block').not($block).removeClass('show');
});

// или

document.addEventListener('click', ({ target: { dataset: { block } } }) => {
  if (block) {
    document.querySelectorAll('.block').forEach(({ classList: cl }) => {
      cl[cl.contains(block) ? 'toggle' : 'remove']('show');
    });
  }
});

или

<button class="button">69</button>
<button class="button">187</button>
<button class="button">666</button>

<div class="block block-one">hello, world!!</div>
<div class="block block-two">fuck the world</div>
<div class="block block-three">fuck everything</div>

const $blocks = $('.block');
const $buttons = $('.button').click(function() {
  const $block = $blocks.eq($buttons.index(this)).toggleClass('show');
  $blocks.not($block).removeClass('show');
});

// или

const blocks = document.querySelectorAll('.block');
const buttons = document.querySelectorAll('.button');

buttons.forEach(n => n.addEventListener('click', onClick));

function onClick() {
  const index = Array.prototype.indexOf.call(buttons, this);
  blocks.forEach((n, i) => n.classList[i === index ? 'toggle' : 'remove']('show'));
}
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Griboks
@Griboks
Используйте jQuery UI. Там куча таких прикольных штук на оф. сайте.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы