Jump to content
  • 0

Как задать поведение для каждого элемента?


hetsketch
 Share

Question

Собственно, есть вот такой блок(картинка внизу). При нажатии на пункт, он должен разворачиваться. Открытым может быть только один пункт. Но у меня пока другая проблема, я никак не могу понять, как мне задать обработчик для каждого пункта по отдельности. Например, когда я нажимаю на первый элемент, то открываться должен только он, у меня получается, что открываются все. Вот то, что я наваял на JS. Прошу сильно не пинать, это только 2й макет).

<div class="work-type">
  <div class="work-item">
    <span>Photography</span>
    <i class="fa fa-angle-down" aria-hidden="true"></i>
  </div>
  <p class="desc">Lorem</p>
  
  <div class="work-item">
    <span>Photography</span>
    <i class="fa fa-angle-down" aria-hidden="true"></i>
  </div>
  <p class="desc">Lorem</p>
</div>
$(document).ready(function() {
  var workItem = $('.work-item');
  var workDesc = $('.desc');
  var arrow = $('.work-item i');

  $(workItem).on('click', function(e) {
    workDesc.slideToggle();
    if ($(arrow).hasClass('fa-angle-down')) {
      $(arrow).removeClass('fa-angle-down');
      $(arrow).addClass('fa-angle-up');
      workItem.css('margin-bottom', '0');
    } else{
      $(arrow).removeClass('fa-angle-up');
      $(arrow).addClass('fa-angle-down');
      workItem.css('margin-bottom', '10px');
    }
  });  
});

 

11.png

Edited by hetsketch
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Зачем изобретать велосипед, если его за нас уже собрали?

https://jqueryui.com/accordion/

А по поводу стрелки сбоку и её замены, используйте псевдоэлелменты after или before. Если стрелку надо поменять, развернуть и т.д. - то скрипт добавляет класс ui-state-active у открытого элемента, с помощью него и меняйте.

Edited by Q4Dizzy
Link to comment
Share on other sites

  • 0

Из за 4 строчек кода подключать целую либу ?!

function toggleMenu(e){
	e.preventDefault();
	$('.site-nav__item').removeClass('site-nav__item--act');
	$(this).parent().addClass('site-nav__item--act');
	$(this).parent().siblings().find('ul').stop().hide('slow');
	$(this).next().stop().toggle('slow');
};

ЗЫ Это я для многоуровневого меню делал ul->li->a  

Link to comment
Share on other sites

  • 0

Ну тут дело каждого, писать свой код или подключать либу. Просто по пошаговому описанию того, что хотел hetsketch, он не знал о аккордеоне. Да и не то время уже, что бы очень уж сильно экономить на килобайтах (Хотя я так же предпочитаю оптимизировать всё, что возможно, не в ущерб функционалу) + никто не мешает кастомизировать либу и извлечь из неё только требуемое.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy