Как сделать такой коллапс [закрыт]

139
21 ноября 2019, 21:20

Кто знает как приблизительно сделать такой коллапс? Верстаю на bootstrap.

Answer 1

const accordeonItems = document.querySelectorAll('.accordeon-item'); 
let timer; 
 
accordeonItems.forEach((item, i) => { 
  if(i > 0){ 
    //"прижимаем" вправо все элементы, начиная со второго 
    item.style.width = `${(accordeonItems.length - i) * 60}px`; 
  } 
   
  item.addEventListener('click', (evt) => { 
    // при клике на элемемент опять перебираем все 
    accordeonItems.forEach((item, j) => { 
      if(j < i){ 
        // если индекс элемета меньше индекса того,  
        // по которому кликнули, то "отправляем" влево 
        item.style.width = `calc(100% - ${j*60}px)`; 
      }else if(j > i){ 
        // если нет, то вправо 
        item.style.width = `${(accordeonItems.length - j) * 60}px`; 
      }else if(j == i){ 
        // если индексы равны, то влево с анимацией 
        item.style.width = `calc(100% - ${j*60-10}px)`; 
        clearTimeout(timer); 
        timer = setTimeout(() => { 
          item.style.width = `calc(100% - ${j*60}px)`; 
        }, 200); 
      } 
       
      // убираем класс active у всех 
      item.classList.remove('active'); 
       
      // и добавляем тому, по которму кликнули 
      evt.currentTarget.classList.add('active');         
    }); 
  }); 
   
});
.accordeon{ 
  position: relative; 
  width: 100%; 
  height: 60px; 
} 
 
.accordeon-item{ 
  position: absolute; 
  top: 0; 
  right: 0; 
  height: 100%; 
  width: 100%; 
  background: #6ad9ff; 
  border: 3px solid #fff; 
  border-radius: 30px; 
  padding: 5px; 
  box-sizing: border-box; 
  transition: width 200ms; 
  cursor: pointer; 
} 
 
.accordeon-item.active{ 
  background: #0093e9; 
} 
 
.accordeon-item:first-child{ 
  background: #fec202; 
  border: 3px solid #fec202; 
} 
 
.accordeon-item-title { 
    float: left; 
    background: #7a00ff; 
    height: 44px; 
    width: 44px; 
    border-radius: 50%; 
    text-align: center; 
    line-height: 44px; 
    color: #fff; 
}
<div class = "accordeon"> 
  <div class = "accordeon-item"> 
    <div class = "accordeon-item-title"> 
      1 
    </div> 
  </div> 
  <div class = "accordeon-item"> 
    <div class = "accordeon-item-title"> 
      2 
    </div> 
  </div> 
  <div class = "accordeon-item"> 
    <div class = "accordeon-item-title"> 
      3 
    </div> 
  </div> 
  <div class = "accordeon-item"> 
    <div class = "accordeon-item-title"> 
      4 
    </div> 
  </div> 
  <div class = "accordeon-item"> 
    <div class = "accordeon-item-title"> 
      5 
    </div> 
  </div> 
</div>

READ ALSO
Удаление класса CSS

Удаление класса CSS

Недавно начал изучать CSS/HTML/JAVA решил на страницу добавить индикатор загрузки, нашел интересное решение https://codepenio/meowwwls/pen/PBBzRL но как бы глупо...

147
Почему создаются лишние элементы?

Почему создаются лишние элементы?

Добавил всего 3 слайда

123