@NonFame

Как сделать кнопки в галерее рабочими?

Есть небольшая галерея, с одной большой картинкой и маленькими. Сделал счетчик картинок, который отслеживает номер картинки. Все работает нормально. Но проблема в том, что не могу написать функции переключения при нажатии на кнопки.

<div class="big">
        <button id="prev">pre</button>
        <img src="img/gallery/first-big.png" alt="img">
        <p class="photo"></p>
        <button id="next">next</button>
    </div>
    <div class="small">
        <ul>
            <li><a href="img/gallery/first-big.png"><img src="img/gallery/first.png" alt=""></a></li>
            <li><a href="img/gallery/second-big.png"><img src="img/gallery/second.png" alt=""></a></li>
            <li><a href="img/gallery/third-big.png"><img src="img/gallery/third.png" alt=""></a></li>
            <li><a href="img/gallery/fourth-big.png"><img src="img/gallery/fourth.png" alt=""></a></li>
        </ul>
    </div>


$(document).ready(function () {
    //Функция переключения картинок
    $('.small ul li > a ').click(function (e) {
        $('.big img').attr('src', $(this).attr('href'))
        e.preventDefault()
    })
    //

    //Счет галереи
    let img = []; // Пустой массив(хранилище) с индексом картинок
    let smallImg = $('.small ul li') //Путь до наших картинок
    smallImg.each(function () { // Перебираем наши эл-ты с картинками и пушим их в массив img
        img.push($(this).index());
    }).click(function () { //Выводит номер картинки, по которой был совершен клик
        $('.photo').html(`<p>${$(this).index() +1}/${img.length}</p>`)



    //Выводим кол-во картинок мини-галереи в html
    $('.photo').html(`<p>${smallImg.index() + 1}/${img.length}</p>`);
    });
})
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const $links = $('.small a');
let currentIndex = null;

function setActiveImage(index) {
  currentIndex = (index + $links.length) % $links.length;
  $('.big img').attr('src', $links.eq(currentIndex).attr('href'));
  $('.photo').text(`${currentIndex + 1} / ${$links.length}`);
}

$links.click(e => (e.preventDefault(), setActiveImage($links.index(e.currentTarget))));
$('#prev').click(() => setActiveImage(currentIndex - 1));
$('#next').click(() => setActiveImage(currentIndex + 1));

setActiveImage(0);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы