v2.5.2
Giriş yap

Javascript Accordion

onlywhatchess
526 defa görüntülendi

Bir accordion yapmaya çalışıyorum, her şey güzel gidiyordu tâki açık olan accordionların hepsinin kapanmasını istiyene kadar.
Yapmak istediklerim:

  • Hepsinin kapalı duruma getirebilir olması
  • Açık olmayan bir accordion butonuna tıklarsam açık olan kapanıp tıkladığımın açılması
  • slideUp / slideDown efekti gibi kapanıp açıklabiliyor olması

Şuana kadar gelebildiğim nokta -> codepen.io


<section class="accordion">
    <button role="button">Accordion 1</button>
    <div class="content 1 show">
        <p>1 Lorem ipsum dolor sit amet consectetur, adipisicing elit. Cupiditate id, cumque in vel
            temporibus incidunt nihil alias. Officia libero est labore fuga, voluptates voluptatum nisi
            facere reprehenderit ab voluptas aliquam.</p>
    </div>
</section>
<section class="accordion">
    <button role="button">Accordion 2</button>
    <div class="content 2">
        <p>2 Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquid sequi eveniet commodi rerum
            doloribus illum quaerat vitae id dignissimos nam neque repellendus, voluptatibus tempore
            sapiente officia rem! Laudantium, voluptatem deserunt?</p>
    </div>
</section>
<section class="accordion">
    <button role="button">Accordion 3</button>
    <div class="content 3">
        <p>3 Lorem ipsum dolor sit amet consectetur adipisicing elit. Quidem nisi eius doloribus, doloremque
            asperiores omnis repudiandae? Commodi culpa ipsa, enim sequi minus esse, natus, similique ad
            libero adipisci voluptatibus doloribus.</p>
    </div>
</section>

.accordion button {
    width: 100%;
    text-align: left;
    padding: 1rem 2rem;
    transition: .4s;
    color: #444;
    background-color: #eee;
}

.accordion button:hover {
    background-color: #ddd;
}

.accordion .content {
    background-color: #fff;
    padding: 1rem 2rem;
    display: none;
}

.accordion .content.show {
    display: block;
}

const buttons = document.querySelectorAll('.accordion button');
buttons.forEach(function (e) {
    e.onclick = function () {
        let content = e.nextElementSibling;
        let cotents = document.querySelectorAll('.accordion .content');
        cotents.forEach(function (c) {
            c.classList.remove('show');
        });
        content.classList.add('show');
    }
});

erdem
1152 gün önce

Zamanında şöyle birşey yapmıştım butona tıklanınca login, register açılıyor açılan bölge dışına tıklayınca veya butona tekrar tıklayınca
div kapanıyor. Bunu target metoduyla yaptım yani tıkladığın yerdeki hedef is()'in içindeki şeyle eşleşmiyorsa false veriyor ve kapatıyor şimdi senin kodunda ise accordion classları ortak bu sebeple tam emin olmamakla beraber;

var accordion = $('button').parent('section').children();
$(document).on("click", function(e) {
if ($(e.target).is(accordion) === false) {
      $('.accordion .content').slideUp();
      //ya da
      $('.accordion .content').removeClass('show');
    }
}    

Bu benim kendi projemde kullandığım kodlar

.openProfile {
display: none;
}
.openProfile.wide {
display: block !important;
}
<button class="showProfile"></button>
<div class="openProfile">
    <div>Login</div>
    <div>Register</div>
</div>
$(function() {
  $(".showProfile").on("click", function(e) {
    if ($(".openProfile").hasClass("wide")) {
      $(".openProfile").hide();
    } else {
      $(".openProfile").addClass("wide");
      e.stopPropagation()
    }
  });
  $(document).on("click", function(e) {
    if ($(e.target).is(".openProfile") === false) {
      $(".openProfile").removeClass("wide");
    }
  });
});