@TipTop89

Как поменять картинки при клике на кнопку?

При клике на кнопку меняется картинка. Проблема в том что таких блоков может быть на странице много, а код применяется только к первому. Подскажите пожалуйста, как сделать так что-бы у каждого блока менялась своя картинка при клике на кнопку?
  • Вопрос задан
  • 458 просмотров
Решения вопроса 1
lina666
@lina666
Изучаю веб ЯП.
В твоем коде в целом все не совсем корректно, вот готовый пример, рабочего, с комментами, попробуй разобрать его, думаю станет понятно и сможешь свой поправить.
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .row {
            display: flex;
            flex-wrap: wrap;
        }
        .picture-block {
            flex: 0 0 50%;
        }
        .picture-block__img {
            width: 300px;
            height: 400px;
        }
        .button.--active {
            background: green;
        }


    </style>
</head>
<body>
<div class="row">
    <div class="picture-block">
        <img
                class="picture-block__img"
                src="https://klike.net/uploads/posts/2021-12/1638345229_2.jpg"
                alt=""
        >
        <div class="picture-block__control">
            <button
                    type="button"
                    class="button --active"
                    data-img="https://klike.net/uploads/posts/2021-12/1638345229_2.jpg"
            >
                left
            </button>
            <button
                    type="button"
                    class="button"
                    data-img="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQwGZ9e0gkF00Cew42Qi2FjfZAUd7QNDp-6V0IjU-FR&s"
            >
                right
            </button>
        </div>
    </div>
    <div class="picture-block">
        <img
                class="picture-block__img"
                src="https://klike.net/uploads/posts/2021-12/1638345229_2.jpg"
                alt=""
        >
        <div class="picture-block__control">
            <button
                    type="button"
                    class="button --active"
                    data-img="https://klike.net/uploads/posts/2021-12/1638345229_2.jpg"
            >
                left
            </button>
            <button
                    type="button"
                    class="button"
                    data-img="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQwGZ9e0gkF00Cew42Qi2FjfZAUd7QNDp-6V0IjU-FR&s"
            >
                right
            </button>
        </div>
    </div>
</div>



<script>
// Находим все кнопки
document.querySelectorAll('.button')
    // Проходимся циклом по каждой
    .forEach(btn => {
        // Навешиваем на каждую слушатель, что бы при клике на кнопку срабатывала данная функция, можно повесить на родительский элемент и слушать клики внутри него
        // что бы не искать родителя в changeImage где то на это есть статья в learnJS, найди сам, я забыл как называется влом искать.  
        btn.addEventListener('click', changeImage)
    })
function changeImage(event) {
    // Если кнопка активна и показывается это изображение, ничего не делаем, можно накинуть более конкретных проверок, например сравнивать url и т.д, но мне лень.
    if (event.target.classList.contains('--active')) {
        return
    }
    // event.target - кнопка по которой нажали - я как правило использую this и делаю все через ООП, но сейчас мне лень

    // Корневой элемент
    const parent = event.target.closest('.picture-block')
    // Все кнопки управления
    const controlButtons = parent.querySelectorAll('.button')
    // Блок с картинкой для замены
    const imgNode = parent.querySelector('.picture-block__img')

    if (event.target.dataset.img) {
        // подставим картинки
        imgNode.src = event.target.dataset.img
        // Удалим подсветку со всех кнопок
        controlButtons.forEach(i => i.classList.remove('--active'))
        // Добавим на нашу кнопку активный класс, для подсветки
        event.target.classList.add('--active')
    } else {
        console.error('img not found')
    }


}
</script>
</body>
</html>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы