Проект JavaScript 30 Day 5 включал работу с переходами CSS и flexbox в большей степени, чем с JavaScript. Мы манипулировали панелями изображений с текстом с помощью JavaScript, но настройка CSS сыграла жизненно важную роль.
Пять панелей были установлены в ряд. Каждая панель содержала три дочерние панели, содержащие текст. Однако изначально была видна только одна дочерняя панель. По щелчку мыши отображаются две другие дочерние панели.
Бос настроил HTML следующим образом:
<div class="panels"> <div class="panel panel1"> <p>Hey</p> <p>Let's</p> <p>Dance</p> </div> <div class="panel panel2"> <p>Give</p> <p>Take</p> <p>Receive</p> </div>... </div>
Затем Бос вложил flexbox внутрь flexbox. Я никогда раньше не видел, чтобы это делалось.
.panels { display: flex; } .panel { display:flex; flex-direction: column; }
Он настроил первый и последний дочерний элемент div .panel так, чтобы он изначально находился вне области просмотра. Затем он создал второй подкласс, .panel.open-active, где они были видны.
.panel > *:first-child {transform: translateY(-100%);} .panel.open-active > *:first-child {transform: translateY(0);} .panel > *:last-child {transform: translateY(100%);} .panel.open-active > *:last-child {transform: translateY(0);}
JavaScript просто прослушивал событие щелчка и переключался между двумя подклассами.
panels.forEach(panel => panel.addEventListener('click', toggleOpen)); function toggleOpen() { this.classList.toggle('open'); }
И аналогичная кодовая последовательность для повторного набора.
panels.forEach(panel => panel.addEventListener('transitionend', toggleActive)); function toggleActive(e) { if(e.propertyName.includes('flex')) { this.classList.toggle('open-active'); }}
Код был мне более знаком, но вложение гибких элементов div создало аккуратный визуальный эффект, которого я раньше не видел.
Посмотреть мои заметки с 4-го дня
Просмотрите мои заметки с самого начала.