Аккордеон не показывает выпадающий контент - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть div с именем .multi-col-icon-list.У этого div есть двое детей:

  • .text_col-1: в которых находятся значки
  • image_col-2: в котором находится динамический div.Он будет отображать информацию, основанную на том, какой значок был нажат.

На рабочем столе значки отображаются в сетке 3x3.Тем не менее, для мобильных устройств, я пытаюсь превратить его в аккордеон.

Изображение, показывающее, как я хотел бы, чтобы оно функционировало:

enter image description here

У меня рабочий стол работает нормально,Но кажется, что текст не отображается под мобильным, и я считаю, что это из-за WordPress.

В приведенном ниже коде вы увидите, что демонстрационный код выполняет свою работу.Однако на моей странице, когда я нажимаю кнопку, на теге p отображается display: block; вместо изменения .accordionPanel на display: block;.

Предположение, что теги p генерируются из WordPress автоматически, и я не хочу входить и отключать их, потому что я не уверен в том, как кодируются другие страницы.

Сказав, что, JS специально заявляет, чтобы изменить . accordionPanel на block, поэтому не знаете, почему меняется p?

Код:

var acc = document.getElementsByClassName("accordion");
var i;

for (i = 0; i < acc.length; i++) {
  acc[i].addEventListener("click", function() {
    this.classList.toggle("active");
    var accordionPanel = this.nextElementSibling;
    if (accordionPanel.style.display === "block") {
      accordionPanel.style.display = "none";
    } else {
      accordionPanel.style.display = "block";
    }
  });
}
img {
  height: 50px;
}
.text_col-1{
  display: flex;
  flex-direction:column;
}
.accordionPanel{
    display: flex;
    flex-direction: row;
    align-items: center;
    border-bottom: 3px solid #6BBDB9;
}
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<div class="two_col-container">
  <div class="text_col-1">
  
        <!-- ACCORDION -->
      <div class="accordion-wrapper">
      
        <!-- ELEMENT 1 -->
         <button class="accordion">
            <img src="https://img.icons8.com/metro/1600/1-circle.png">
             <h4>Section 1</h4>
         </button>
         <div class="accordionPanel">
           <p>text for icon 1</p>
         </div>
         
         <!-- ELEMENT 2 -->
         <button class="accordion">
           <img src="https://img.icons8.com/metro/1600/2-circle.png">
           <h4>Section 2</h4>
         </button>
         <div class="accordionPanel">
           <p>text for icon 2</p>
         </div>
         
         <!-- ELEMENT 3 -->
         <button class="accordion">
            <img src="https://img.icons8.com/metro/1600/2-circle.png">
            <h4>Section 3</h4>
         </button>
         <div class="accordionPanel">
           <p>text for icon 3</p>
         </div>
         <!-------------->
      </div>
  </div>
</div>

Мои вопросы:

  1. Есть ли обходной путь?чтобы сделать .accordionPanel display: block, а не что-нибудь еще?
  2. Как мне сделать так, чтобы кнопки всегда были закрыты при первом запуске?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Вот аккордеон без java-скрипта:

html-код:

<body>
<!-- We will make a simple accordian with hover effects 
The markup will have a list with images and the titles-->
<div class="accordian">
    <ul>
        <li>
            <div class="image_title">
                <a href="#">KungFu Panda</a>
            </div>
            <a href="#">
                <img src="http://thecodeplayer.com/uploads/media/3yiC6Yq.jpg"/>
            </a>
        </li>
        <li>
            <div class="image_title">
                <a href="#">Toy Story 2</a>
            </div>
            <a href="#">
                <img src="http://thecodeplayer.com/uploads/media/40Ly3VB.jpg"/>
            </a>
        </li>
        <li>
            <div class="image_title">
                <a href="#">Wall-E</a>
            </div>
            <a href="#">
                <img src="http://thecodeplayer.com/uploads/media/00kih8g.jpg"/>
            </a>
        </li>
        <li>
            <div class="image_title">
                <a href="#">Up</a>
            </div>
            <a href="#">
                <img src="http://thecodeplayer.com/uploads/media/2rT2vdx.jpg"/>
            </a>
        </li>
        <li>
            <div class="image_title">
                <a href="#">Cars 2</a>
            </div>
            <a href="#">
                <img src="http://thecodeplayer.com/uploads/media/8k3N3EL.jpg"/>
            </a>
        </li>
    </ul>
</div>

Код CSS:

/*Now the styles*/
* {
    margin: 0; 
    padding: 0;
}
body {
    background: #ccc; 
    font-family: arial, verdana, tahoma;
}

/*Time to apply widths for accordian to work
Width of image = 640px
total images = 5
so width of hovered image = 640px
width of un-hovered image = 40px - you can set this to anything
so total container width = 640 + 40*4 = 800px;
default width = 800/5 = 160px;
*/

.accordian {
    width: 805px; height: 320px;
    overflow: hidden;

    /*Time for some styling*/
    margin: 100px auto;
    box-shadow: 0 0 10px 1px rgba(0, 0, 0, 0.35);
    -webkit-box-shadow: 0 0 10px 1px rgba(0, 0, 0, 0.35);
    -moz-box-shadow: 0 0 10px 1px rgba(0, 0, 0, 0.35);
}

/*A small hack to prevent flickering on some browsers*/
.accordian ul {
    width: 2000px;
    /*This will give ample space to the last item to move
    instead of falling down/flickering during hovers.*/
}

.accordian li {
    position: relative;
    display: block;
    width: 160px;
    float: left;

    border-left: 1px solid #888;

    box-shadow: 0 0 25px 10px rgba(0, 0, 0, 0.5);
    -webkit-box-shadow: 0 0 25px 10px rgba(0, 0, 0, 0.5);
    -moz-box-shadow: 0 0 25px 10px rgba(0, 0, 0, 0.5);

    /*Transitions to give animation effect*/
    transition: all 0.5s;
    -webkit-transition: all 0.5s;
    -moz-transition: all 0.5s;
    /*If you hover on the images now you should be able to 
    see the basic accordian*/
}

/*Reduce with of un-hovered elements*/
.accordian ul:hover li {width: 40px;}
/*Lets apply hover effects now*/
/*The LI hover style should override the UL hover style*/
.accordian ul li:hover {width: 640px;}


.accordian li img {
    display: block;
}

/*Image title styles*/
.image_title {
    background: rgba(0, 0, 0, 0.5);
    position: absolute;
    left: 0; bottom: 0; 
width: 640px;   

}
.image_title a {
    display: block;
    color: #fff;
    text-decoration: none;
    padding: 20px;
    font-size: 16px;
}
0 голосов
/ 14 декабря 2018

попробуйте это в качестве базы:

$( document ).ready(function() {
    $(".accordionPanel").css('display', 'none'); //hide all the accordions as the script loads
    $(".accordion").each( function() {
        $(this).on("click", function() {
            $(".accordion").removeClass("active");
            $(".accordionPanel").css('display', 'none');
            $(this).addClass("active");
            $(this).next(".accordionPanel").css('display','block');
        })
    })

});
img {
  height: 50px;
}
.text_col-1{
  display: flex;
  flex-direction:column;
}
.accordionPanel{
    display: flex;
    flex-direction: row;
    align-items: center;
    border-bottom: 3px solid #6BBDB9;
}
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<div class="two_col-container">
  <div class="text_col-1">
  
        <!-- ACCORDION -->
      <div class="accordion-wrapper">
      
        <!-- ELEMENT 1 -->
         <button class="accordion">
            <img src="https://img.icons8.com/metro/1600/1-circle.png">
             <h4>Section 1</h4>
         </button>
         <div class="accordionPanel">
           <p>text for icon 1</p>
         </div>
         
         <!-- ELEMENT 2 -->
         <button class="accordion">
           <img src="https://img.icons8.com/metro/1600/2-circle.png">
           <h4>Section 2</h4>
         </button>
         <div class="accordionPanel">
           <p>text for icon 2</p>
         </div>
         
         <!-- ELEMENT 3 -->
         <button class="accordion">
            <img src="https://img.icons8.com/metro/1600/3-circle.png">
            <h4>Section 3</h4>
         </button>
         <div class="accordionPanel">
           <p>text for icon 3</p>
         </div>
         <!-------------->
      </div>
  </div>
</div>
...