Bootstrap accordion: вызов отдельных функций на элементах как в открывающих, так и в закрывающих картах

Я создаю аккордеон, используя BS4.

У меня есть фоновое изображение на каждом из заголовков карт, которое я хочу скрыть, когда тело этой карты открыто, и показать, когда тело этой карты закрыто.

Конечная цель - показать все изображения на закрытых карточках и скрыть изображения на открытой карточке.

Весь аккордеон создан в forEach(); мои идентификаторы используют индексы из этого цикла.

Как надежно вызвать функцию, чтобы скрыть изображение открывающейся карты, одновременно вызывая функцию для отображения изображения на закрывающей карточке?

Мой текущий HTML:

<div id="accordion">
    <div class="card">

        <!-- the img I want to toggle opacity on: -->
        <img class="card-img center-cropped" id="cardHeaderBG'+ index +'" src="'+ item.cover_big +'"> </img>

        <div class="card-header card-img-overlay" id="heading' + index + '">' +
            <button class="btn btn-link collapsed" id="wrapper" data-toggle="collapse" data-target="#collapse' + index + '">
            ... content ...
            </button>
        </div>
        <div id="collapse' + index + '" class="collapse" aria-labelledby="heading' + index + '" data-parent="#accordion">
            <div class="card-body">
                ... content ...
            </div>
        </div>
    </div>
</div>

Мой текущий JS:

$(function() {
  $(".collapse").on('show.bs.collapse', function(e) {
    $(this).siblings("img").animate({opacity: 0})

  })
});


$(function() {
  $(".collapse").on('hide.bs.collapse', function(e) {
    $(this).siblings("img").animate({opacity: 1})
  })
});

Спасибо всем, я ценю любые рекомендации, которые вы готовы предложить.

1 ответ

Пожалуйста, проверьте коды ниже

HTML: я обернул img в div с классом .img

<div id="accordion">
    <div class="card">

        <!-- the img I want to toggle opacity on: -->
        <div class="img"><img class="card-img center-cropped" id="cardHeaderBG'+ index +'" src="'+ item.cover_big +'"></div>

        <div class="card-header card-img-overlay" id="heading' + index + '">' +
            <button class="btn btn-link collapsed" id="wrapper" data-toggle="collapse" data-target="#collapse' + index + '">
            ... content ...
            </button>
        </div>
        <div id="collapse' + index + '" class="collapse" aria-labelledby="heading' + index + '" data-parent="#accordion">
            <div class="card-body">
                ... content ...
            </div>
        </div>
    </div>
</div>

JS:

$('.collapse').each(function() {
  var targetColls = $(this);

  targetColls.on('hide.bs.collapse', function () { 
    $(this).closest('.card').find('.img').addClass('img-show');
  });

  targetColls.on('show.bs.collapse', function () {
    $(this).closest('.card').find('.img-show').removeClass('img-show');
  });
});

CSS:

.card .img {
  position: relative;
  height: 0;
  overflow: hidden;
  transition: height .35s ease;
}

.img-show {
  height: auto;
}
Другие вопросы по тегам