Ситуация такова
Есть 22 пунктов слева
Есть слайдер справа( слайдер из фотографии )
При клике на пункт, слайдер должен иметь те фото что относятся к пункту слева
Возникло 2 идеи как реализовать, подскажите, что лучше или может вы предложите что то универсальное
Меня именно интересует Front End часть, поэтому про идеи вывода ajaxoм из Базы данных, прошу не советовать
Если слайдер переинициализировать не слишком часто, то это вполне приемлемо (учитывая малое кол-во элементов, 22).
const list = document.querySelector('#list'),
slider = document.querySelector('#slider');
let siema;
for (let i = 0; i < 22; ++i) {
const src = `https://picsum.photos/id/${100 + i}/500/300/`;
list.insertAdjacentHTML('beforeend', `
<li data-src="${src}" data-checked="0">Image ${i}</li>
`.trim());
}
document.body.addEventListener('click', ({ target }) => {
if (target.matches('#list li')) {
target.dataset.checked = +!(+target.dataset.checked);
updateSlider();
} else if (target.matches('.nav') && siema) {
siema[target.id]();
}
});
function updateSlider() {
siema && siema.destroy();
slider.innerHTML = '';
for (const el of list.querySelectorAll('#list [data-checked="1"]')) {
slider.insertAdjacentHTML('beforeend', `
<div><img src="${el.dataset.src}"></div>
`.trim());
}
siema = new Siema({ loop: true });
}
html, body, #list { height: 100%; margin: 0; padding: 0; }
body { background: #444; font-family: sans-serif; }
section, #list { height: 100%; overflow-y: hidden; }
section { display: flex; flex-flow: row nowrap; align-items: stretch; }
#list {
flex: 0 0 130px;
list-style: none;
overflow-y: scroll;
border-right: 1px solid #aaa; }
#list > li { padding: 1rem; color: #ccc; }
#list > li[data-checked="1"] { color: #aff; }
#list > li[data-checked="1"]::before { content: '️✔ '; display: inline; }
#slider { flex: 1 1 auto; align-self: center; margin: 0 auto; text-align: center; }
#slider img { max-width: 100%; max-height: 100%; }
.nav {
flex: 0 0 auto; align-self: center;
margin: 0 1rem; padding: 0.25rem;
background: #aaa;
cursor: pointer; }
<script src="https://cdn.jsdelivr.net/npm/siema@1.5.1/dist/siema.min.js"></script>
<section>
<ul id="list"></ul>
<span id="prev" class="nav">◀</span>
<div id="slider" class="siema"></div>
<span id="next" class="nav">▶</span>
</section>
Если хочется обойтись без переинициализации (для экономии ресурсов и сохранения состояния прокрутки) - то очевидно, нужно искать/создавать слайдер с возможностью обновления при добавлении и удалении слайдов. Не все готовые решения это поддерживают.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Обращение к this внутри функции, созданной в объекте Vue указывает на сам объект 'Vue'Как обратиться к this элемента, на котором произошло событие...
Нужно реализовать функцию, которая принимает на вход функцию-обработчик и дерево, а возвращает отображенное дерево
Возможно ли работать(читать) с com-port значения? То есть получать значение в реалтайме и выводить его в браузер с помощью JS