Как изменить класс с помощью jquery на основе индекса?

#jquery #html

#jquery #HTML

Вопрос:

Я пытаюсь создать галерею на Shopify, которая поддерживает webp (длинная история).

У меня все в порядке на 99%, изображения отображаются правильно. Мне просто нужно изменить некоторые классы на основе миниатюры, на которую нажимают.

Существует жидкий цикл, который создает все «основные» изображения, все панели первого имеют класс «main-image-hidden», который его скрывает.

Другой жидкий цикл создает эскизы, первый имеет класс «thumb-active», который устанавливает непрозрачность в 0,5, чтобы показать, что он активен.

У меня в голове была четкая идея, как это сделать. Например, если щелкнуть миниатюру с data-slide-index=»3″, произойдет следующее: Основное изображение с индексом 3 удаляет класс «main-image-hidden» Основные изображения (которые ранее были активны) получают класс «main-image-hidden» Миниатюра с индексом 3 получает класс «thumb-active» Миниатюра (которая была ранее активна) теряет класс «thumb-active» (индекс должен быть переменной по понятным причинам!)

Есть ли кто-нибудь достаточно любезный, чтобы указать мне правильное направление для этого?

Заранее спасибо.

»’

     <div class="popup-gallery center" style="max-height:500px; padding-bottom: 10%;">
      {%- for image in product.images -%}
      {% assign webp_url = image.src | img_url: '1x1' | replace: 'products', 'files' | split: 'x' %}

    <a href="{{ webp_url[0] }}x1000.webp" alt="{{ image.alt }}"  class="main-image {% if forloop.first == false %}main-image-hidden{% endif %}" data-slide-index="{{ forloop.index0 }}">

        <picture>
          <source type="image/webp" class="lazy"
                  data-src="{{ webp_url[0] }}x500.webp 1x"
                  data-srcset="{{ webp_url[0] }}x1000.webp 2x,
                               {{ webp_url[0] }}x500.webp 1x">
          <img alt="{{ image.alt }}" class="lazy" 
               data-src="{{ webp_url[0] }}x500.png 1x" 
               data-srcset="{{ webp_url[0] }}x1000.png 2x,
                            {{ webp_url[0] }}x500.png 1x">
        </picture>
        <noscript>
          <img alt="{{ image.alt }}" src="{{ webp_url[0] }}x50.png">
        </noscript>
      </a>
      {%- endfor -%}
    </div>


    {%- if product.images.size > 1 -%}

    <div class="center">
      {%- for image in product.images -%}
      {% assign webp_url = image.src | img_url: '1x1' | replace: 'products', 'files' | split: 'x' %}

      <div style="padding: 0 1%; display:inline-block;" class="thumb {% if forloop.first %}thumb-active{% endif %}" data-slide-index="{{ forloop.index0 }}">

        <picture>
          <source type="image/webp" class="lazy"
                  data-src="{{ webp_url[0] }}x50.webp 1x"
                  data-srcset="{{ webp_url[0] }}x100.webp 2x,
                               {{ webp_url[0] }}x50.webp 1x">
          <img alt="{{ image.alt }}" class="lazy" style="max-height:50px"
               data-src="{{ webp_url[0] }}}x50.png 1x" 
               data-srcset="{{ webp_url[0] }}x100.png 2x,
                            {{ webp_url[0] }}x50.png 1x">
        </picture>
        <noscript>
          <img alt="{{ image.alt }}" src="{{ webp_url[0] }}x50.png">
        </noscript>
      </div>
      {%- endfor -%}
    </div>

    {%- endif -%}


  </div>
  

»’

Я пробовал разное время, но могу учесть индекс.

Ответ №1:

Я думаю, я понимаю, что вы хотите сделать. Вы можете использовать селектор атрибутов CSS в jQuery, чтобы найти элемент со значением data-slide-index . Это событие делает это за вас?

 $('.thumb').click(function() {
    var index = $(this).attr('data-slide-index');

    $('.main-image').addClass('main-image-hidden');
    $('.main-image[data-slide-index='   index   ']').removeClass('main-image-hidden');

    $('.thumb-active').removeClass('thumb-active');
    $(this).addClass('thumb-active');
});
  

Комментарии:

1. Это действительно так — вы легенда! Большое вам спасибо 🙂

Ответ №2:

 //This method first get the index after using javascript add style in the this index

<script>
    var serach_main_wrpa = document.getElementsByClassName('serach_main_wrpa');
    function showContent(event) {
       
       
        $(".diamondType").each(function () {
            if ($(this).hasClass("active")) {
                var numItems = $(this).index();
                $(this).removeClass("active");
                serach_main_wrpa[numItems].style.display = "none";
                console.log(numItems);
            }
            $(event).addClass("active");
        });
    }

</script>